使用JPA注意事项及踩过的坑

  1. 使用多对多(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上,千万千万不能混合使用,否则会报这个错误!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起随缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值