数据库异常整理:org.hibernate.QueryException: could not resolve property: “xxx”

本文探讨了使用Hibernate进行数据库多表查询时遇到的常见问题——属性无法解析,并提供了详细的解决思路,包括检查HQL语句中的字段是否与JavaBean中的字段匹配,以及遵循JavaBean的命名规范。
hibernate作数据库多表查询,结果遇到问题:


org.hibernate.QueryException: could not resolve property: ‘xxxx’of  经过各个步骤检查,还是没找到方法。


在此,整理一下这个问题的导致可能原因:


                 、排查HQL语句中的类字段,看是否是Java类中的字段,不要是数据库中的字段;


                、排查各个字段是否与类中字段一致,绝大多数可能是由于字段不匹配导致的问题;


                、如果以上两部都检查没有问题,那么很可能就是JavaBean命名规范不严格符合所导致的hibernate不能够匹配字段的问题。(附:命名规范)

JavaBean类命名规范:(注意:要实现可序列化接口(java.io.Serializable接口))

规范参考:http://www.cnblogs.com/Ghost-Draw-Sign/articles/1801476.html


(1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public  ,如: public class user{......}
(2)JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器

(3)一个javaBean类不应有公共实例变量,类变量都为private  ,如: private int id;
(4)属性应该通过一组存取方法(getXxx 和 setXxx)来访问,一般是IDE(Eclipse、JBuilder) 为属性生成getter/setter 方法


一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。

但是,还有一些特殊情况:


1、如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是getuName/setuName。

2、如果前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是getURL/setURL。

3、如果首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name。

所以在JavaBean命名时应该注意符合以上命名规范。

10-20 13:29:46.844 INFO [JdbcTransactionObjectSupport.java:60] JDBC 3.0 Savepoint class is available 10-20 13:29:46.853 ERROR [SearchOrderAction.java:87] could not resolve property: orderIndex of: com.smec.apps.oms.orderContract.domain.OrderDetail [from com.smec.apps.oms.orderContract.domain.OrderDetail orderDetail where orderDetail.delFlag= 0 and orderDetail.orderNo != 'New' and orderDetail.createdByCompany = ? and exists (from com.smec.apps.oms.orderContract.domain.Order orders where orders.delFlag= 0 and orders.releaseStatus = 'Close' and orderDetail.orderNo = orders.orderNo and orderDetail.createdByCompany = orders.createdByCompany) order by orderDetail.createdTime desc, orderDetail.orderNo asc, cast(orderDetail.orderIndex as integer) asc]; nested exception is net.sf.hibernate.QueryException: could not resolve property: orderIndex of: com.smec.apps.oms.orderContract.domain.OrderDetail [from com.smec.apps.oms.orderContract.domain.OrderDetail orderDetail where orderDetail.delFlag= 0 and orderDetail.orderNo != 'New' and orderDetail.createdByCompany = ? and exists (from com.smec.apps.oms.orderContract.domain.Order orders where orders.delFlag= 0 and orders.releaseStatus = 'Close' and orderDetail.orderNo = orders.orderNo and orderDetail.createdByCompany = orders.createdByCompany) order by orderDetail.createdTime desc, orderDetail.orderNo asc, cast(orderDetail.orderIndex as integer) asc] 10-20 13:29:46.860 WARN [DefaultActionInvocation.java:265] No result defined for action com.smec.apps.oms.orderContract.action.SearchOrderAction and result null 10-20 13:29:47.845 WARN [CommonUtils.java:264] safeGetParameter called on a POST HttpServletRequest for LogoutRequest. Cannot complete check safely. Reverting to standard behavior for this Parameter
最新发布
10-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值