Java 如何运行查询,如;设置SQL“安全”更新=0;与JPA合作
我希望在我的spring桌面应用程序中运行此查询Java 如何运行查询,如;设置SQL“安全”更新=0;与JPA合作,java,mysql,spring-boot,jpa,spring-data-jpa,Java,Mysql,Spring Boot,Jpa,Spring Data Jpa,我希望在我的spring桌面应用程序中运行此查询 SET SQL_SAFE_UPDATES = 0; 它应该是GET请求还是PUT请求?我两个都试过了,但都没有成功。 目前我正在努力 @GetMapping("/orderbook/safeMode") private void setSafeMode() { orderBookRepository.setSafeMode(); } 但它给出了一个错误 2019-10-18 11:38:37.844 ERROR
SET SQL_SAFE_UPDATES = 0;
它应该是GET请求还是PUT请求?我两个都试过了,但都没有成功。
目前我正在努力
@GetMapping("/orderbook/safeMode")
private void setSafeMode() {
orderBookRepository.setSafeMode();
}
但它给出了一个错误
2019-10-18 11:38:37.844 ERROR 12112 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper : ResultSet is from UPDATE. No Data.
2019-10-18 11:38:37.851 ERROR 12112 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not execute query; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query] with root cause
java.sql.SQLException: ResultSet is from UPDATE. No Data.
请提供任何建议以下是使用Spring数据更新DB中对象的正确流程:
// first go get that object by id, ex :
OrderBook orderBook = orderBookRepository.findById(1);
//
if (orderBook != null) {
orderBook.setSafeMode(0); // setter
orderBookRepository.save(orderBook); // updating if object already have id and the id is existed in DB or will save new object if there are no id existed in DB.
}
编辑
若你们找到了用Spring数据JPA锁定对象进行更新的方法
悲观读取–允许我们获得共享锁并防止
数据不会被更新或删除
@Lock(LockModeType.悲观读取)
公共可选findById(长id);//推翻
当您首先调用orderBookRepository.findById(1)时,其他人无法更新它,直到您已经提交了该对象 它通过向存储库方法添加@modify和@Transactional注释来工作
@Modifying
@Transactional
@Query(value = "SET SQL_SAFE_UPDATES = 0;", nativeQuery = true)
void setSafeMode();
感谢尼古拉·舍甫琴科建议@修改注释
了解更多信息的重要链接
但我不想在这里更新orderbook对象。我想运行查询“SET SQL\u SAFE\u UPDATES=0;”我明白了,因为我们在JPAAhh中没有执行查询方法,所以询问如何执行。您需要像
Select*fromtable这样的东西来进行更新代码>?像那样的事?不是真的!!我正试图运行我提到的查询(而不是更新任何内容)。我知道如何使用JPA通过spring framework更新对象。我在任何地方都没有提到我想通过id获取orderbook对象或更新或保存它。好的,lah:),可能我不理解你的问题。尝试将@Modifying
注释添加到存储库方法中,它显示“message”:“执行更新/删除查询;嵌套异常为javax.persistence.TransactionRequiredException:执行更新/删除查询“
@Lock(LockModeType.PESSIMISTIC_READ)
public Optional<OrderBook> findById(Long id); // override
@Modifying
@Transactional
@Query(value = "SET SQL_SAFE_UPDATES = 0;", nativeQuery = true)
void setSafeMode();