1: DAO层方法入参带pageable,那么JPQL无法用left join fetch,因为默认会进行select count(),而count()函数后面无法带xxx join fetch,必须去掉fetch才可以,否则抛出以下异常
query specified join fetching, but the owner of the fetched association was not present in the select list
2: Dao层方法入参不带pageable,那么JQPL可以用left join fetch,这个其实也好理解,fetch本来就是解决1+N的问题,一次性抓取所有,如果带上分页,那么与之就冲突了,
所以也可这样理解,带分页的OneToMany(默认是LAZY),迭代many的时候,必定会出现多个sql语句,也就意味着要容忍这种性能问题,因为毕竟带了分页,(1+N)查询满足条件的1有若干个(带分页),
那么每个1进行迭代many的时候都会出现多个sql,要容忍,其实也可以不容忍,想其它办法!
2: 对于@OneToMany,不需要出现@JoinColumn注解,而且要带上mappedBy="",表示当前One方不维护外键关系,对应数据库表就是多的一方加外键,在many方加上@ManyToOne@JoinColumn注解外键,其中optional默认为true,表示该外键值可以为空,具体看源码,这个有时候在自动生成表的时候会有用
综上所述:用data jpa开发起来是挺方便的(建表、几乎不写sql、领域模型建的好,查询基本没问题),不过性能始终有待提升,需要不断的优化,最后还是尽量能用mybatis就用mybatis吧。。。