正在用Seam+Spring+Hibernate开发一个物流相关的项目,下午QA发现了一个这样的问题:
当用某些字段作为条件查找的时候,会出错。后来经过查看Hibernate的log日志,发现Hibernate产生的Sql语句中凡是有下划线的都没有正确解析到:比如:
Entity Class Snippet:
private Float ctnnweight;
private Float ctngweight;
private Integer quantityPerCtn;
.............................
@Column(name = "quantity_per_ctn")
public Integer getQuantityPerCtn() {
return quantityPerCtn;
}
Action Class Snippet:
models = this.shippingDatabase
.createQuery(
"select distinct m from Model m left outer join m.agiles agile order by m.name asc")
.setMaxResults(pageSize).setFirstResult(page * pageSize).list();
..................................
..................................
if (!bUnw) {
sql.append(" and unitnweight=:unitnweight");
}
if (!bUgw) {
sql.append(" and unitgweight=:unitgweight");
}
if (!bQpre) {
sql.append(" and quantityPerCtn=:quantityPerCtn");
}
Table Structure:
id: varchar(255)
unitnweight: int
unitgweight: int
quantity_per_ctn: int
如果用unitnweight或unitgweight作为查询条件的或,没有问题。但是如果用quantityPerCtn的话,就会出现问题了。查看Hibernate产生的Sql语句中,发现Hibernate没有把quantityPerCtn正确映射成quantity_per_ctn。后来把sql修改为:
if (!bUnw) {
sql.append(" and m.unitnweight=:unitnweight");
}
if (!bUgw) {
sql.append(" and m.unitgweight=:unitgweight");
}
if (!bQpre) {
sql.append(" and m.quantityPerCtn=:quantityPerCtn");
}
注意,这个时候在每个field前加上了一个别名,就能够正确映射表的字段明了。因为前两个Entity类的field名和表的字段名是一样的,所以不同经过映射也能正确查找,而第三个field和数据表的字段名不对应,而又没有映射到的话,就会出现问题了。不过好像Hibernate在处理下划线的时候经常会出现问题,不知道用了以上方法之后能不能解决,还是另有他因,本人是个新手,有n多东西都还在探索当中啊,要多多努力加油!
这有个文章,或许有时候可以参考一下:
引用
控制时间 发表于: 2007-7-23 07:35 来源: 创意空间
很多朋友问我在使用Hibernate技术的时候如何解决数据下划线映射问题。网上有很多已经指出了解决方法!但是很多人还是不能搞定。我这里就把方法直接点说出来!给大家共享!
通过Hibernate映射数据后会发现带有下划线的字段被映射成了别的东西。比如有一个字段名称是这样的“u_name”那么Hibernate映射后其名称就变成了UName,观察对应的XML文件其中是这么定义的“<property name="UName" column="u_name" type="string" not-null="true" />”。打开相应的类文件查看。初次看完这个类后会发现没有问题,但是添加数据的时候会出错,错误如下:“Could not find a getter for UName in class com.table.Tone”错误说明了在com.table.Tone这个类里面找不到UName。
处理方法如下:1.修改XML文件将“UName”更换成“uname”注意是小写(当然这个名字可以自己定义了)。然后把对应类里面的私有成员变量 “private String UName;”改成“private String uname”并且替换所有名称为“UName”的地方。很多朋友到这里就卡住了,因为这样修改完毕后还是会报“Could not find a getter for UName in class com.table.Tone”错误。因为你只是修改了一半而已。2.还要替换与“UName”相关的set与get方法名称。(如果要问我为什么?那么我就要说你不了解Hibernate的处理机制就不要是用Hibernate了。浪费工具)。这样就完成了!运行吧!呵呵!
如果还有什么疑问可以跟贴!
分享到:
相关推荐
本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...
如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...
【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的...理解并熟练掌握这些查询方式,将有助于我们在Java开发中更好地运用Hibernate。
利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~
有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的Native SQL查询功能。示例如下: ```java String sql = "SELECT b.name, COUNT(a.fee), MIN(a.chargeBeginTime), MAX(a.chargeEndTime) " + ...
### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...
它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地 SQL 查询等。 在 Hibernate 中检索对象的各种方法: 1. 导航对象图:通过对象的关联关系,...
在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...
Hibernate分页查询小结
本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...
**正文** Hibernate是一款强大的Java持久化框架,它简化了数据库操作,使得开发人员可以更加专注于业务逻辑而不是数据库交互。...希望这篇文章能帮助你更好地理解和使用Hibernate进行数据库查询。
在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API...理解并熟练掌握这两种查询方式,将有助于提升Hibernate的使用效率和代码质量。
本文将深入探讨在使用Hibernate进行MySQL查询时的一些关键知识点,以帮助开发者更好地理解和应用这些技术。 首先,我们需要理解Hibernate的核心概念。Hibernate通过提供一个中间层,将Java对象与数据库表进行映射,...
首先,本地SQL查询(Native SQL)是指直接在Hibernate中使用原生的SQL语句进行查询,而不是使用HQL(Hibernate Query Language)。这允许开发者充分利用SQL的功能,比如进行复杂的统计计算或者处理特定数据库的特性...
在使用Hibernate3进行数据库操作时,中文查询出错是一个常见的问题,这主要涉及到字符编码、数据库配置以及Hibernate的设置等多个方面。以下将详细介绍如何解决这个问题。 首先,我们要明白错误的根源通常在于字符...
在使用Hibernate进行数据库操作时,有时会遇到一个常见的问题,即当从数据库中查询Date类型的数据并由Hibernate返回时,发现结果中的时分秒部分不正确。这个问题通常源于多个因素,包括日期时间的序列化与反序列化...
在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...
在这个例子中,假设当前使用的数据库为MySQL,则Hibernate内部会调用`MySQLDialect`中的方法来生成带有LIMIT关键字的SQL语句,具体实现如下: ```java public String getLimitString(String sql) { StringBuffer ...
在这个“Hibernate查询映射试验”项目中,你可能会遇到如何配置SessionFactory、如何创建和执行HQL/Criteria查询、如何处理关联映射(如一对一、一对多、多对多)、如何使用事务管理等实践环节。理解并熟练掌握这些...