一、JPA强在简单的CRUD,动态查询、Join查询虽然支持,但是不是很友好。
二、在体量比较大的场景下,性能优化会非常复杂。
比如OneToOne,ManyToOne is not lazy,在查询主对象的时候,会同时查询对应的关联对象。
假设有2个OneToOne关联对象,查1000次主对象,将会带来2000次关联对象的查询。并且这块你没办法优化,没办法改成批量的方式。
又比如update前会再查询一次做比对,可能很多场景下不用,此时就带来一次额外的查询。
这里有一篇详细的博文可以参考下。
三、JAP隐式规则太大,例如save和saveflush,save没用好就会导致事务问题
四、JPA社区活跃度基本没有,但是问题确很多,个人遇到过并发问题、大数据量stackoverflow问题,都没有得到有效解答
等等,不建议选型JPA。
什么时候使用JPA
在项目体量比较小,基本都是简单的sql操作,追求开发速度,追求统一规范(JPA底层框架可以动态替换)的场景下,可以选型JPA。