- 使用多对多(ManyToMany)注解时,出现无限循环包含对方
解决方法:需要在多的一方的对象的set方法上写上注解
@JsonBackReference,如图
2.通过@Query注解自定义新增sql传入对象的写法
controller写法,如图
Repository层写法,如图
具体代码:
@Modifying
@Transactional
@Query(value = “insert into rk_sharegroup(group_name,start_time,end_time,create_time) values(:#{#record.groupName},:#{#record.startTime},:#{#record.endTime},now())”,nativeQuery = true)
int addShareGroup(@Param(“record”)ShareGroup record);
3.jpa使用数据库默认值的问题
使用jpa自带的save方法时,新增和编辑时都是全量操作实体类属性,会对null也进行增加和修改,但有时数据库可能设置了默认值,而我们想要只设置某些字段,其他字段仍使用数据库的默认值,此时需要在实体类上添加@DynamicInsert注解
注意:但是编辑时由于新增的时候添加了默认值,编辑时有些字段可能没传,此时仍然会将已经添加的默认值置为null,所以编辑不建议使用jpa自带的save方法,防止不必要的数据覆盖问题,自己通过@Query注解写自定义更新sql
4.JPA操作默认是事务级别是只读的,如果要进行删除修改添加,必须加上@Modifyying注解,但加了此注解后,该操作虽然被声明是修改操作,但是本身的事务级别并没有改变,仍然是只读。所以需要在@Modifying前面再加上@Transactional注解,覆盖默认的事务隔离级别
5.避免注解混合使用,否则会报 org.hibernate.MappingException: Could not determine type
解决方法:注解要么写在字段上,要么写在getXX上,千万千万不能混合使用,否则会报这个错误!