
【免费下载链接】kotlin-agent-skillsA collection of AI agent skills useful for projects using Kotlin language项目地址https://gitcode.com/gh_mirrors/ko/kotlin-agent-skills点击查看免费下载如果你在用 Kotlin Spring Data JPA 开发后端大概率遇到过两个老朋友N1 查询让接口变慢LazyInitializationException让接口直接报 500。kotlin-agent-skills 是 JetBrains 开源的 Kotlin AI 智能体技能集合其中的kotlin-backend-jpa-entity-mapping技能专门教你的 AI 编码助手如何正确建模 JPA 实体、诊断 N1 和懒加载异常、设计抓取策略fetch plan让排查工作从猜变成查。为什么 Kotlin 项目的 JPA 更容易踩坑JPA 本身的坑对所有语言都成立但 Kotlin 的惯用法会放大它们常见写法隐藏问题data class实体equals/hashCode基于全部字段状态一变Set/Map成员判断就失效data class的copy()会为托管实体生成游离副本污染持久化上下文toString引用懒加载集合IDE 调试、日志打印瞬间触发懒加载直接抛LazyInitializationExceptionid 0当哨兵值无法区分未保存和真实 id 为 0 的歧义风险技能的完整规则可以在 SKILL.md 中查看同一份内容也以插件形式放在 plugins/kotlin-agent-skills/skills/kotlin-backend-jpa-entity-mapping/SKILL.md。三步快速定位 N1查 SQL不猜注解很多新手看到OneToMany就紧张看到FetchType.LAZY就放心——技能给出的第一条准则恰恰相反诊断 N1 要看真实的查询次数和 SQL 日志而不是凭注解下结论。实操三步法打开 SQL 日志在开发环境开启 Hibernate 的 SQL 输出show_sql观察一次列表请求到底发出几条查询。数查询次数一次列表页请求发出 1 N 条几乎相同的查询就是典型的 N1。对症下药根据访问模式选择下面的抓取方案而不是全局改成EAGER。技能明确禁止到处堆FetchType.EAGER来掩盖懒加载症状因为那只是把问题从运行期挪到了查询膨胀。四种抓取策略怎么选技能推荐的定向方案有四个按常见程度排列方案一EntityGraph声明式抓取适合访问模式固定的接口。在 Repository 方法上声明需要预加载的关联路径一条 SQL 带出关联数据不改实体注解、不影响其他查询。方案二JOIN FETCH直接联表用 JPQL 显式JOIN FETCH最灵活适合复杂关联。注意对集合型关联做JOIN FETCH时再加分页结果集可能被笛卡尔积放大——这是技能特别提醒的权衡点。方案三批量抓取batch fetching在实体上配置BatchSize让 Hibernate 把 N 次单条查询合并成IN (...)批量查询是 N1 的低成本止血方案。方案四DTO 投影根本不带集合如果列表页其实只需要订单号和状态就让查询直接投影到 DTO实体根本不进内存懒加载自然无从谈起。这是性能最稳的做法。 技能还有一条护栏值得记住声称修复了 N1必须能说清楚抓取计划如何改变了查询行为——说不出来的修复等于没修。预防 LazyInitializationException 的三个习惯LazyInitializationException的本质是在事务/会话之外触碰了懒加载属性。三个高频触发点和对应习惯toString别碰懒加载关系实体只打印 id 和状态字段调试日志才安全JSON 序列化在事务内完成如果关闭了open-in-view把实体转 DTO 的工作必须放在事务边界内API 默认不直接暴露实体返回 DTO序列化时机可控异常也就没处冒头。Kotlin 实体的正确长相技能给出的标准姿势规则摘要详见 Entity Design 章节实体用普通classdata class留给 DTO数据库自增 id 建模为var id: Long? null加protected set用空值表达未保存equals只比较 idhashCode返回类级常量保证脏检查与代理解包下依然稳定启用kotlin(plugin.jpa)无参构造支持并保证类与成员可被代理。安装技能让 AI 助手替你把关技能遵循 Agent Skills 标准是一个包含SKILL.md指令的自包含文件夹。安装方式见 README.mdnpx skills add Kotlin/kotlin-agent-skills之后当你让 AI 编码助手创建订单实体或排查这个接口的慢查询时它会自动遵循这套实体设计、唯一性约束数据库约束 应用层检查双层防护和抓取策略规则。延伸阅读技能完整规则skills/kotlin-backend-jpa-entity-mapping/SKILL.md仓库贡献指南CONTRIBUTING.md技能分类说明backend / toolingCATEGORIES一句话总结别猜注解、别堆 EAGER——看 SQL 数查询再用EntityGraph、JOIN FETCH、批量抓取或 DTO 投影四选一配合 Kotlin 实体的 id 等值语义N1 和懒加载异常基本就告别了。赞分享【免费下载链接】kotlin-agent-skillsA collection of AI agent skills useful for projects using Kotlin language项目地址https://gitcode.com/gh_mirrors/ko/kotlin-agent-skills点击查看免费下载相关推荐JPA-Spec: 深入定制的JPA查询规范实战JPA Spec: 深入定制的JPA查询规范实战 本教程将引领您探索 JPA Spec 这一强大的开源项目通过它我们可以实现更灵活、更复杂的Java PersLaravel Debugbar 命令行调试实战用 debugbar:find / get / queries 定位慢请求、N1 查询与异常Laravel Debugbar 命令行调试实战用 debugbar:find / get / queries 定位慢请求、N1 查询与异常 本篇技术指南围开发工具后端告别N1查询噩梦EF Core延迟加载的智能优化策略告别N1查询噩梦EF Core延迟加载的智能优化策略 你是否曾遇到过这样的情况仅仅想加载一个用户列表数据库却执行了数十次查询这就是典型的N1查询问题ORM后端数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考