解决jpa查询语句自动变成了update的问题

网友投稿 788 2022-12-21

解决jpa查询语句自动变成了update的问题

解决jpa查询语句自动变成了update的问题

jpa查询语句自动变成了update

今天碰到了个奇怪的问题,明明dao中一个查询函数,一直报connection read-only错误,断点设置过去,发现明明一个select 查询语句,一直到生成Query查看变量里面都是查询的代码,可一执行就变成了update,简直见了鬼了。

我的架构是sshj,层次也就是entity,dao,service,action,代码如下,非常简单的代码:

dao层:

public boolean findCanXiaohu(String code) {

http:// try {

String queryStr = " select count(*) from t_tablename ";

Query query = em.createNativeQuery(queryStr);

Long res = (Long) query.getSingleResult();

if (res > 0) {

return false;

} else {

return true;

}

} catch (Exception e) {

return true;

}

}

serivce层:

public boolean getCanXiaohu(String code){

return dao.findCanXiaohu(code);

}

action层:

public String edit(){

String res = super.edit();

if ("1".equals(entity.getYhzhanghuxingzhi())) {

String code = entity.getYhcunkuanrenbianhao();

canXiaohu = service.getCanXiaohu(code);

} else {

canXiaohu = true;

}

return "input";

}

刚开始我以为是因为在action层我写进了prepareModel方法中,这个方法按道理也没有写入数据库操作,但以防万一吧,我改到了edit方法下,这个方法也就是打开一个编辑页面,其prepareEdit函数中执行了prepareModel,也不过根据传递的id从数据库中查找entity。

奇怪就奇怪在一执行到getCanXiaohu,看断点也执行到了dao.findCanXiaohu(),实话说,我在前面查找问题过程中,还把函数名都改成这样了,原来没有前缀find、get,就如同上面说的,我断点设置到查询语句,一步步执行,生成query的时候看里面的语句还是select,可一执行到query.getSingleResult(),它就直接异常,然后看输出的语句,就成了一个update t_table的语句,其中的set语句set 各字段的值,因为这个函数是查询函数,没加事务,所以不能执行update,所以就会异常出错。但它就是个查询,我也并不打算做修改,不知道为什么会出这样的问题,怎么改都不行,也搞不明白是怎么回事。

我就各种试,最后, 我把语句改成了jpql标准语句,然后,居然可以了!!!!!!

public boolean findCanXiaohu(String code) {

try {

String queryStr = " select count(o) from ClassName o ";

Query query = em.createQuery(queryStr);

Long res = (Long) query.getSingleResult();

if (res > 0) {

return false;

} else {

return true;

}

} catch (Exception e) {

return true;

}

}

不报错了,也执行查询了,虽然成功了,可我还是不知道是怎么回事。

JPA框架中UPDATE语句问题

一定要加上下面这个两个注解啊啊啊啊啊!!!!!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:扬州车载物联网卡哪家好(扬州车载物联网卡哪家好用)
下一篇:一体化政务服务平台 简报(政务服务中心一体化平台)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~