Can not issue data manipulation statements with executeQuery()错误的延申

在写JPA自定义插入sql的时候报错。网上查了好多,但都是没什么可行的办法。大都是说:
执行create,update,insert的sql语句应该用statement的execute()方法,如果用的是statement的executeQuery()就会出现上诉问题
但在JPA中这也不怎么好找。。。。。

最后,找到了解决的办法:

 @Transactional
    @Modifying
    @Query(nativeQuery = true,value = "insert into catalog_tree(catalog_name,parent_id,level) values(?1,?2,?3)")
    int insertCatalog(String cataLogName,Integer parentId,Integer level);

没错!! 添加事务注解 @Transactional和@Modifying。完美解决。

然后顺着这个问题,去查了下@Modifying这个注解的作用:
(1)可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作。
注意: JPQL 不支持使用 INSERT;
(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知   SpringData, 这是一个 UPDATE 或 DELETE 操作
(3)UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作;
(4)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。
他们不能完成修改操作。

感觉对这个问题很有针对性。还有**,这个JPA原生语句,对于插入,更新,删除都必须加上@Modifying注解才不会报错!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值