Spring Jpa 更新:无法使用 executeQuery() 发出数据操作语句
Spring Jpa Update: Can not issue data manipulation statements with executeQuery()
我尝试使用句柄查询来更新 SQL
数据库中的 table。
代码:
@Autowired
private ProducerRepository producerRepository;
public void update(Producer producer){
String name = producer.getProducerName();
long id = producer.getId();
// producerRepository.save(producer); //this method works well.
producerRepository.update(name, id); //handle attempt - throws exeption in this string
}
生产者资料库:
@Repository
public interface ProducerRepository extends JpaRepository<Producer, Long>{
@Query(nativeQuery = true, value = "UPDATE producer SET producer_name = :pName WHERE id = :id")
Producer update(
@Param("pName") String pName,
@Param("id") long id
);
}
producer
实体的所有参数都正确,producerRepository.save(producer)
运行良好。
(我也在控制台 name
和 id
字段中输出 - 好吧)
所以,我可以在数据库中保存 producer
,但是,当我尝试使用 update()
方法时,我得到了错误。
Can not issue data manipulation statements with executeQuery()
PS
sql 控制台中的查询也很好
(UPDATE producer SET producer_name = 'some name' WHERE id = ....)
应该注意的是,存储库中的其他 SQL 本机查询工作正常。所以 spring/hibernate/jdbc 设置是正确的。
使用注释@Modifying
。
This will trigger the query annotated to the method as updating query
instead of a selecting one.
来自 2.2.6 修改查询 https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html
如果上述解决方案不起作用,请使用此
@Modifying
@Transactional
@Query(value ="delete from admindata where user_name = :userName AND group_name = :groupName",nativeQuery = true)
public void deleteadminUser(@Param("userName") String userName,@Param("groupName") String groupName);
@Query(nativeQuery = true, value = "UPDATE producer SET producer_name = :pName WHERE id = :id")
Producer update(
@Param("pName") String pName,
@Param("id") long id
);
您的更新方法是 returning Producer 对象,return 应该是 int 或 void,因为您是 returning Producer 实体,Spring JPA 是认为它必须获取对象而不是更新它,这就是它执行 executeQuery 而不是 executeUpdate 的原因,并且您还需要 @Modifying 注释。
我尝试使用句柄查询来更新 SQL
数据库中的 table。
代码:
@Autowired
private ProducerRepository producerRepository;
public void update(Producer producer){
String name = producer.getProducerName();
long id = producer.getId();
// producerRepository.save(producer); //this method works well.
producerRepository.update(name, id); //handle attempt - throws exeption in this string
}
生产者资料库:
@Repository
public interface ProducerRepository extends JpaRepository<Producer, Long>{
@Query(nativeQuery = true, value = "UPDATE producer SET producer_name = :pName WHERE id = :id")
Producer update(
@Param("pName") String pName,
@Param("id") long id
);
}
producer
实体的所有参数都正确,producerRepository.save(producer)
运行良好。
(我也在控制台 name
和 id
字段中输出 - 好吧)
所以,我可以在数据库中保存 producer
,但是,当我尝试使用 update()
方法时,我得到了错误。
Can not issue data manipulation statements with executeQuery()
PS
sql 控制台中的查询也很好
(UPDATE producer SET producer_name = 'some name' WHERE id = ....)
应该注意的是,存储库中的其他 SQL 本机查询工作正常。所以 spring/hibernate/jdbc 设置是正确的。
使用注释@Modifying
。
This will trigger the query annotated to the method as updating query instead of a selecting one.
来自 2.2.6 修改查询 https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html
如果上述解决方案不起作用,请使用此
@Modifying
@Transactional
@Query(value ="delete from admindata where user_name = :userName AND group_name = :groupName",nativeQuery = true)
public void deleteadminUser(@Param("userName") String userName,@Param("groupName") String groupName);
@Query(nativeQuery = true, value = "UPDATE producer SET producer_name = :pName WHERE id = :id")
Producer update(
@Param("pName") String pName,
@Param("id") long id
);
您的更新方法是 returning Producer 对象,return 应该是 int 或 void,因为您是 returning Producer 实体,Spring JPA 是认为它必须获取对象而不是更新它,这就是它执行 executeQuery 而不是 executeUpdate 的原因,并且您还需要 @Modifying 注释。