`
superloafer
  • 浏览: 170732 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用Hibernate查询有下划线的表字段遇到的问题

阅读更多
正在用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_query查询数据表中的一个字段.

    本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...

    Hibernate连表查询 Hibernate连表查询

    如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...

    通用的hibernate查询

    【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的...理解并熟练掌握这些查询方式,将有助于我们在Java开发中更好地运用Hibernate。

    Hibernate查询练习小例子

    利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~

    hibernate多表联合查询

    有时候,我们可能需要执行一些更复杂的SQL查询,这时可以使用Hibernate的Native SQL查询功能。示例如下: ```java String sql = "SELECT b.name, COUNT(a.fee), MIN(a.chargeBeginTime), MAX(a.chargeEndTime) " + ...

    struts+hibernate查询所有记录

    ### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...

    Hibernate查询语言HQL.PPT

    它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地 SQL 查询等。 在 Hibernate 中检索对象的各种方法: 1. 导航对象图:通过对象的关联关系,...

    hibernate实现动态SQL查询

    在Hibernate中,我们通常使用HQL(Hibernate Query Language)或Criteria API进行查询,但这些方式并不支持复杂的动态查询。为了实现动态SQL,我们可以借助于Hibernate的QBC(Query By Criteria)和Criteria API,...

    Hibernate分页查询小结

    Hibernate分页查询小结

    hibernate 模糊查询 分页

    本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...

    hibernate查询代码

    **正文** Hibernate是一款强大的Java持久化框架,它简化了数据库操作,使得开发人员可以更加专注于业务逻辑而不是数据库交互。...希望这篇文章能帮助你更好地理解和使用Hibernate进行数据库查询。

    hibernate里面的 两种查询

    在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API...理解并熟练掌握这两种查询方式,将有助于提升Hibernate的使用效率和代码质量。

    Hibernate的MySql查询.rar

    本文将深入探讨在使用Hibernate进行MySQL查询时的一些关键知识点,以帮助开发者更好地理解和应用这些技术。 首先,我们需要理解Hibernate的核心概念。Hibernate通过提供一个中间层,将Java对象与数据库表进行映射,...

    hibernate将本地SQL查询结果封装成对象

    首先,本地SQL查询(Native SQL)是指直接在Hibernate中使用原生的SQL语句进行查询,而不是使用HQL(Hibernate Query Language)。这允许开发者充分利用SQL的功能,比如进行复杂的统计计算或者处理特定数据库的特性...

    关于Hibernate3中文查询出错问题的解决

    在使用Hibernate3进行数据库操作时,中文查询出错是一个常见的问题,这主要涉及到字符编码、数据库配置以及Hibernate的设置等多个方面。以下将详细介绍如何解决这个问题。 首先,我们要明白错误的根源通常在于字符...

    解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题

    在使用Hibernate进行数据库操作时,有时会遇到一个常见的问题,即当从数据库中查询Date类型的数据并由Hibernate返回时,发现结果中的时分秒部分不正确。这个问题通常源于多个因素,包括日期时间的序列化与反序列化...

    hibernate子查询

    在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...

    Hibernate分页查询原理解读

    在这个例子中,假设当前使用的数据库为MySQL,则Hibernate内部会调用`MySQLDialect`中的方法来生成带有LIMIT关键字的SQL语句,具体实现如下: ```java public String getLimitString(String sql) { StringBuffer ...

    Hibernate查询映射试验

    在这个“Hibernate查询映射试验”项目中,你可能会遇到如何配置SessionFactory、如何创建和执行HQL/Criteria查询、如何处理关联映射(如一对一、一对多、多对多)、如何使用事务管理等实践环节。理解并熟练掌握这些...

Global site tag (gtag.js) - Google Analytics