文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

jpa查询语句自动变成了update

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

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

dao层:


public boolean findCanXiaohu(String code) {
  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语句问题

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯