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

 更新时间:2021年08月06日 08:59:58   作者:YYZhQ  
这篇文章主要介绍了解决jpa查询语句自动变成了update的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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语句问题

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Spring Boot+MyBatis框架做查询操作的示例代码

    使用Spring Boot+MyBatis框架做查询操作的示例代码

    这篇文章主要介绍了使用Spring Boot+MyBatis框架做查询操作的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Java利用HttpClient模拟POST表单操作应用及注意事项

    Java利用HttpClient模拟POST表单操作应用及注意事项

    本文主要介绍JAVA中利用HttpClient模拟POST表单操作,希望对大家有所帮助。
    2016-04-04
  • SpringBoot启动java.nio.charset.MalformedInputException: Input length = 1报错的解决方案

    SpringBoot启动java.nio.charset.MalformedInputException: I

    本文主要介绍了SpringBoot启动java.nio.charset.MalformedInputException: Input length = 1报错的解决方案
    2023-07-07
  • ArrayList foreach循环增添删除导致ConcurrentModificationException解决分析

    ArrayList foreach循环增添删除导致ConcurrentModificationException解决分

    这篇文章主要为大家介绍了ArrayList foreach循环增添删除导致ConcurrentModificationException解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-12-12
  • Java导出Excel文件的方法

    Java导出Excel文件的方法

    项目里很多接口都涉及导出Excel文件,所以本文给大家总结了项目中导出Excel文件的方法,并通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2025-02-02
  • 进一步理解Java中的多态概念

    进一步理解Java中的多态概念

    这篇文章主要介绍了进一步理解Java中的多态概念,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • 查找jdk安装路径并且切换多版本jdk的详细步骤

    查找jdk安装路径并且切换多版本jdk的详细步骤

    在日常的工作学习中可能需要用到不同版本的jdk,下面这篇文章主要给大家介绍了关于查找jdk安装路径并且切换多版本jdk的详细步骤,文中介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 浅谈JackSon的几种用法

    浅谈JackSon的几种用法

    这篇文章主要介绍了浅谈JackSon的几种用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Spring Cloud Gateway + Nacos 实现动态路由

    Spring Cloud Gateway + Nacos 实现动态路由

    这篇文章主要介绍了Spring Cloud Gateway + Nacos 实现动态路由的方法,帮助大家实现路由信息的自动更新,感兴趣的朋友可以了解下
    2020-10-10
  • java求解汉诺塔问题示例

    java求解汉诺塔问题示例

    汉诺塔问题的描述如下:有3根柱子A、B和C,在A上从上往下按照从小到大的顺序放着一些圆盘,以B为中介,把盘子全部移动到C上。移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子。编程实现3阶汉诺塔的求解步骤
    2014-02-02

最新评论