Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何运行查询,如;设置SQL“安全”更新=0;与JPA合作_Java_Mysql_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

Java 如何运行查询,如;设置SQL“安全”更新=0;与JPA合作

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

我希望在我的spring桌面应用程序中运行此查询

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();