记录一下今天发生的JPA惨案
1、jpa org.hibernate.lazyinitializationexception could not initialize proxy - no session
这是因为Hibernate3开始,hibernate默认开启了懒加载,proxy=true, 简单来说就是在进行数据库访问之时,当前针对数据库 的访问与操作session已经关闭且释放了,故提示no Session可用。
解决办法,在duiy对应实体类加上 '@Proxy(lazy=false)' 注解即可,
例如:User user = (User)repository.getOne( 1 ); 那就在 User 类上加上 @Proxy(lazy=false)
2、jpa @Query Caused by: java.lang.NullPointerException
这个也坑,我就说怎么人家的@Query("update ShopCoupon sc set sc.deleted = true where sc.id in :ids")可以,我的 @Query("update ShopCoupon set sc.deleted = true where ShopCoupon.id in :ids")就老是报错呢?
原来是因为我没有用重命名,不重命名无法使用。
解决办法:在ShopCoupon 后加上 se 重命名即可,修改后为@Query("update ShopCoupon sc set sc.deleted = true where sc.id in :ids") 注意红色字段!!
3、jpa java.lang.IllegalStateException: For queries with named parameters you need to use provide names
这个最坑,报错:java.lang.IllegalStateException: For queries with named parameters you need to use provide names for method parameters. Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.
主要是说@Param注解是java8的¥*&!……@#*:">""。于是看了一下是不是Jar包导错了。
结果还他吗真是。
解决办法:讲@Param的注解换成 org.springframework.data.repository.query.Param 包下的。
这个才是对的,之前由于IDEA猛按alt+enter太爽一时刹不住车就默认选了第一个。