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

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

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



示例


  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. * @Copyright2016-2017  - Powered By 研发中心
  18. * @author: FLY
  19. * @date:  2017-12-1612:35
  20. * @version V1.0
  21. */
  22. @Repository
  23. publicinterfacePayRepositoryextendsJpaRepository<UserEnroll, Long>,JpaSpecificationExecutor<UserEnroll> {
  24.    /**
  25.     * @Title: 更新用户报名缴费信息,为支付成功
  26.     * @methodName:  updateUserEnrollPaySuccess
  27.     * @param paytime
  28.     * @param orderno
  29.     * @param localOrderno
  30.     * @returnint
  31.     * @Description:
  32.     *
  33.     * @author: FLY
  34.     * @date:  2017-12-188:41
  35.     */
  36. @Transactional(rollbackFor = Exception.class)
  37. @Modifying
  38.    @Query("UPDATE UserEnroll SET payflag = 2 , paytime = :paytime , orderno = :orderno  WHERE localOrderno = :localOrderno")
  39.    intupdateUserEnrollPaySuccess(@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. * @Copyright2016-2017  - Powered By 研发中心
  18. * @author: FLY
  19. * @date:  2017-12-1613:29
  20. * @version V1.0
  21. */
  22. @RunWith(SpringRunner.class)
  23. @SpringBootTest
  24. publicclassPayRepositoryTest {
  25.    @Autowired
  26.    PayRepository payRepository;
  27.    /**
  28.     * @Title: 更新用户报名缴费信息,为支付成功
  29.     * @methodName:  testUpdateUserEnrollPaySuccess
  30.     * @param
  31.     * @returnvoid
  32.     * @Description:
  33.     *
  34.     * @author: 王延飞
  35.     * @date:  2017-12-188:21
  36.     */
  37.    @Test
  38.    publicvoidtestUpdateUserEnrollPaySuccess() {
  39.        inti= payRepository.updateUserEnrollPaySuccess(newDate(), "2017121613345689", "2017121613345689");
  40.        UserEnrolluserEnroll= payRepository.findByLocalOrderno("2017121613345689");
  41.        System.out.println("更新条数:"+i);
  42.       Assert.assertEquals("2017121613345689", userEnroll.getOrderno());
  43.    }
  44. }


注意:


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

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




目录
相关文章
|
15小时前
【开发专题_02】Executing an update/delete query
【开发专题_02】Executing an update/delete query
|
5月前
|
SQL 关系型数据库 MySQL
INSERT ... ON DUPLICATE KEY UPDATE Statement
INSERT ... ON DUPLICATE KEY UPDATE Statement
36 0
|
8月前
|
SQL Java
[已解决]SpringDataJPA+Hibernate在执行executeUpdate()的时候报错 Executing an update/delete query
[已解决]SpringDataJPA+Hibernate在执行executeUpdate()的时候报错 Executing an update/delete query
|
SQL druid Oracle
由for update引发的血案
公司的某些业务用到了数据库的悲观锁 for update,但有些同事没有把 for update 放在 Spring 事务中执行,在并发场景下发生了严重的线程阻塞问题,为了把这个问题吃透,秉承着老司机的职业素养,我决定要给同事们一个交代。
524 0
由for update引发的血案
|
Web App开发 异构计算