JPA:@Modifying注解(UPDATE或者DELETE)

JPA:@Modifying注解(UPDATE或者DELETE)通过 Modifying 注解可以完成修改 UPDATE 或者 DELETE 操作 注意 不支持新增 示例 packagecom newcapec dao repository pay importcom newcapec dao domain UserEnroll importorg springframew data jpa repository JpaRe

 
   
  1. 通过 @Modifying 注解可以完成修改(UPDATE或者DELETE)操作(注意:不支持新增)

  • SpringDataJpa——JpaRepository增删改查(请参考):http://blog.csdn.net/fly/article/details/


示例

    
  1. package com.newcapec.dao.repository.pay;
  2. import com.newcapec.dao.domain.UserEnroll;
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  5. import org.springframework.data.jpa.repository.Modifying;
  6. import org.springframework.data.jpa.repository.Query;
  7. import org.springframework.data.repository.query.Param;
  8. import org.springframework.stereotype.Repository;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import java.util.Date;
  11. import java.util.List;
  12. /
  13. * @Title: 用户报名缴费信息--DAO
  14. * @ClassName: com.newcapec.dao.repository.pay.PayRepository.java
  15. * @Description:
  16. *
  17. * @Copyright 2016-2017 - Powered By 研发中心
  18. * @author: FLY
  19. * @date: 2017-12-16 12:35
  20. * @version V1.0
  21. */
  22. @Repository
  23. public interface PayRepository extends JpaRepository<UserEnroll, Long>,JpaSpecificationExecutor<UserEnroll> {
  24. /
  25. * @Title: 更新用户报名缴费信息,为支付成功
  26. * @methodName: updateUserEnrollPaySuccess
  27. * @param paytime
  28. * @param orderno
  29. * @param localOrderno
  30. * @return int
  31. * @Description:
  32. *
  33. * @author: FLY
  34. * @date: 2017-12-18 8:41
  35. */
  36. @Transactional(rollbackFor = Exception.class)
  37. @Modifying
  38. @Query("UPDATE UserEnroll SET payflag = 2 , paytime = :paytime , orderno = :orderno WHERE localOrderno = :localOrderno")
  39. int updateUserEnrollPaySuccess(@Param("paytime")Date paytime, @Param("orderno")String orderno , @Param
  40. ("localOrderno")String localOrderno);
  41. }

测试:
 
   
  1. package com.newcapec.dao;
  2. import com.newcapec.dao.domain.UserEnroll;
  3. import com.newcapec.dao.repository.pay.PayRepository;
  4. import org.junit.Assert;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.test.context.SpringBootTest;
  9. import org.springframework.test.context.junit4.SpringRunner;
  10. import java.util.Date;
  11. import java.util.List;
  12. /
  13. * @Title: 用户报名缴费信息--DAO测试
  14. * @ClassName: com.newcapec.dao.PayRepositoryTest.java
  15. * @Description:
  16. *
  17. * @Copyright 2016-2017 - Powered By 研发中心
  18. * @author: FLY
  19. * @date: 2017-12-16 13:29
  20. * @version V1.0
  21. */
  22. @RunWith(SpringRunner.class)
  23. @SpringBootTest
  24. public class PayRepositoryTest {
  25. @Autowired
  26. PayRepository payRepository;
  27. /
  28. * @Title: 更新用户报名缴费信息,为支付成功
  29. * @methodName: testUpdateUserEnrollPaySuccess
  30. * @param
  31. * @return void
  32. * @Description:
  33. *
  34. * @author: 王延飞
  35. * @date: 2017-12-18 8:21
  36. */
  37. @Test
  38. public void testUpdateUserEnrollPaySuccess() {
  39. int i = payRepository.updateUserEnrollPaySuccess(new Date(), "45689", "45689");
  40. UserEnroll userEnroll = payRepository.findByLocalOrderno("45689");
  41. System.out.println("更新条数:"+i);
  42. Assert.assertEquals("45689", userEnroll.getOrderno());
  43. }
  44. }

注意:



 
    
  1. 1)可以通过自定义的 JPQL 完成 UPDATE DELETE 操作。 注意: JPQL 不支持使用 INSERT
  2. 2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 SpringData 这是一个 UPDATE DELETE 操作
  3. 3UPDATE DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作;
     
            
    1. JPA实现的dao接口在写testcase 需要加事务的注解,如上;
    2. 但正是环境,事务一般是加在service层;



  4. 4)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232839.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jdk1.8的环境配置「建议收藏」

    jdk1.8的环境配置「建议收藏」jdk1.8的环境配置原文地址:传送门每日必答:在开始之前呢,小Du来来带大家了解几个问题,希望能够在面试中,小Du的解答给你帮助。1.什么是JDK?答:javadevelopmentkit的缩写,意思是JAVA开发工具,我们写文档做PPT需要office办公软件,开发当然需要开发工具了,说到开发工具大家肯定会想到Eclipse,但是如果直接安装Eclipse你会发现它是运行不起来是会报错的,只有安装了JDK,配置好了环境变量和path才可以运行成功。2.JRE是什么?答:jav

    2022年6月11日
    35
  • navicat激活码3月最新在线激活

    navicat激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    47
  • 获取base64编码格式的图片大小[通俗易懂]

    获取base64编码格式的图片大小[通俗易懂]//imageBase就是要传来的图片数据因为我传来的照片头部已经去掉了,所以这里就不需要再做处理,只做“=”号的处理就可以了publicintobtainImageSize(StringimageBase){Stringstr=imageBase;str=str.replace(“=”,””);//这里计算出来的是字节大小也即是Bintsize=(str.length()-(str.length()/8

    2022年6月19日
    23
  • 讨武瞾檄

    讨武瞾檄

    2021年5月5日
    106
  • 十进制,BCD数怎样转8421BCD码

    十进制,BCD数怎样转8421BCD码BCD 数是一种采用 4 位二进制数表示 1 位十进制数 0 9 而得到的数 nbsp nbsp nbsp nbsp 例如 89 的 BCD 码为 相当于将 89 中的 8 和 9 分别转为二进制 而可以得出 BCD 码 nbsp nbsp nbsp nbsp 则可以得出 89 的 BCD 数为 0 nbsp nbsp nbsp nbsp 接下来就是将此 BCD 码转为 8421BCD 码了 其实很简单 将每个分别转

    2025年6月21日
    3
  • Java_BigDecimal类型比较大小

    Java_BigDecimal类型比较大小这个类是java里精确计算的类1比较对象是否相等一般的对象用equals,但是BigDecimal比较特殊,举个例子:BigDecimala=BigDecimal.valueOf(1.0);BigDecimalb=BigDecimal.valueOf(1.000);在现实中这两个数字是相等的,但是问题来来了…

    2022年7月14日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号