当前位置:网站首页>拼接hql时,新增字段没有出现在构造方法中
拼接hql时,新增字段没有出现在构造方法中
2022-04-23 14:26:00 【罗罗的1024】
问题描述
在使用hibernate拼接hql时,新增字段竟然没有出现在构造方法中(下面是简化版,真实情况要复杂的多)
//实体类
public class Tmd {
private String CBh;
private Integer NSjzzaqxx;
//private String CAjysly;//新加字段
public static final String cTmdConstructorFields = "(CBh,NSjzzaqxx)";
//public static final String cTmdConstructorFields = "(CBh,NSjzzaqxx,CAjysly)";//新增字段添加进构造器
//......Constructos......
//......getter/setter......
}
//工具类
public class DatamodelUtils{
public static String CTmdConstructorFields = Tmd.cTmdConstructorFields;
}
通过Hibernate查询对象,这里使用select new 的方式,SQL里的对象有多少个参数,实体类也要有数据类型和参数个数一致的构造器
StringBuilder hql = new StringBuilder();
hql.append("select new ").append("com.luo.Tmd").append(DatamodelUtils.CTmdConstructorFields);
服务器上跑的就是这个,因为需求,我在Tmd新增了一个字段CAjysly,构造器也进行了修改,最后我把修改后的 Tmd.class 放到测试环境上的工作目前work中,重启项目,报错
Caused by: org.springframework.orm.hibernate3.HibernateQueryException: Unable to locate appropriate constructor on class .....
看了日志,发现没有我新增的字段,最后拼接的hql是这样的
select new com.luo.Tmd(CBh,NSjzzaqxx)
为啥我新增的字段没有呢?
原因分析:
是不是新增了字段后,代码没有编译上
随后我马上到生成环境上查看Tmd.class,看看是不是我没有编译上,随后使用arthas去看了Tmd.class,发现新增字段是存在的,构造器里面也有,此时的我很懵逼
//修改之前的DatamodelUtils.class
public static String CTmdConstructorFields = "(CBh,NSjzzaqxx)";
然后看看DatamodelUtils.CTmdConstructorFields
值,发现竟是 "(CBh,NSjzzaqxx)"
,还是原来的值,此时大概就明白了,我出的替换文件仅仅是Tmd.class,但是DatamodelUtils.class还是原来的,并没有重新加载,因为服务器根本没有检测到DatamodelUtils的变化
解决方案:
对DatamodelUtils重新进行编译,发布到测试环境上
反思总结:
在出增量替换文件的情况下,对于常量的修改,要切记使用到常量的地方,都要重新进行编译,然后发布
版权声明
本文为[罗罗的1024]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_42224683/article/details/124245703
边栏推荐
- 想要成为架构师?夯实基础最重要
- 基于单片机的DS18B20的数字温度监控报警系统设计【LCD1602显示+Proteus仿真+C程序+论文+按键设置等】
- 流程控制之分支语句
- redis的五种数据类型
- LLVM - 生成加法
- MCU function signal generator, output four kinds of waveforms, adjustable frequency, schematic diagram, simulation and C program
- 555定时器+74系列芯片搭建八路抢答器,30s倒计时,附Proteus仿真等
- Master in minutes --- ternary operator (ternary operator)
- Basic regular expression
- 8.2 文本预处理
猜你喜欢
On the insecurity of using scanf in VS
AT89C52单片机的频率计(1HZ~20MHZ)设计,LCD1602显示,含仿真、原理图、PCB与代码等
电子秤称重系统设计,HX711压力传感器,51单片机(Proteus仿真、C程序、原理图、论文等全套资料)
sar命令详解
基于单片机的DS18B20的数字温度监控报警系统设计【LCD1602显示+Proteus仿真+C程序+论文+按键设置等】
单片机的函数信号发生器,输出4种波形,频率可调,原理图,仿真和C程序
Nacos作为配置中心(四) 使用Demo
L'externalisation a duré quatre ans.
C语言知识点精细详解——初识C语言【1】——你不能不知的VS2022调试技巧及代码实操【1】
流程控制之分支语句
随机推荐
Proteus simulation design of DC adjustable regulated power supply (with simulation + paper and other data)
kprobe 的 3 种使用
Preview CSV file
Detailed explanation of C language knowledge points -- first knowledge of C language [1]
常见存储类型和FTP主被动模式解析
PWM speed regulation control system of DC motor based on 51 single chip microcomputer (with complete set of data such as Proteus simulation + C program)
Qt界面优化:鼠标双击特效
A blog allows you to learn how to write markdown on vscode
LLVM - 生成 if-else 以及 PH
51单片机+LCD12864液晶显示的俄罗斯方块游戏,Proteus仿真、AD原理图、代码、论文等
解决ssh配置文件优化以及连接慢的问题
JS parabola motion packaging method
C语言p2选择分支语句详解
51 MCU flowers, farmland automatic irrigation system development, proteus simulation, schematic diagram and C code
四层和八层电梯控制系统Proteus仿真设计,51单片机,附仿真和Keil C代码
flannel 原理 之 TUN模式
8.5 循环神经网络简洁实现
ssh限制登录的四种手段
Electronic scale weighing system design, hx711 pressure sensor, 51 single chip microcomputer (proteus simulation, C program, schematic diagram, thesis and other complete data)
Docker篇 (五) MySQL的安装