HQL加where条件,得不到正确的数据

szxiaofei14 2012-06-22 01:33:23
各位大虾,小弟刚接触hibernate,在配置好持久化类以后,

AcMenu acMenu = (AcMenu)this.getSession().get(AcMenu.class,"2");
acMenu.getMenuName();得到了正确的数据 '22222'

而在我用了
String queryString = "from AcMenu where menuid in('2','3','4')";
operatorList = this.getSession().createQuery(queryString).list();

for(Object op:operatorList){
AcMenu acMenu = (AcMenu)op;
System.out.println(acMenu.getMenuName());
}
得到的确是三条数据
'22222'
'22222'
'22222'
而不是在数据库中存放的
'22222'
'33333'
'44444'

我打印其它属性的时候,都成了三条空置
''
''
''
请问一下,这是什么原因,为什么加了where语句过滤以后,和用get方法查出来的数就不同了呢?





...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
szxiaofei14 2012-06-23
  • 打赏
  • 举报
回复
晕,搞了半天。。,
原来主键menuid 我设置的是varchar(40),里边的数据如果是'001','002','003',是没问题的,
但是如果是 '1','2','3'就出现这个问题了,
我把主键的类型该为int,就不会出现这个问题,
我用的是hibernat3.6.10,这是不是里边的Bug啊~
szxiaofei14 2012-06-22
  • 打赏
  • 举报
回复
我把查询语句改为

String queryString = "select am.menuid,am.menuname,am.menucode from AcMenu am where am.menuid in('2','3','4')";

根据集合去检索,就不会有问题,这是怎么回事?
szxiaofei14 2012-06-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
楼主 一般hql语句都需要写别名的,不然啊 会出问题的,所以 以后不管怎样 我都会为每张表加别名。
from AcMenu a where a.menuid in ('2','3','4')
[/Quote]
都一样
我用

public List findByChildrens(final List childrens){
log.debug("finding all AcMenu instances");
try {
final String queryString = "select am from AcMenu am where am.menuid in('2','3','4')";

List operatorList = null;

AcMenu acMenu = (AcMenu)this.getSession().load(AcMenu.class,"2");
System.out.println(acMenu.getMenucode());

operatorList = this.getSession().createQuery(queryString).list();

for(Iterator acMenuListIt =operatorList.iterator();acMenuListIt.hasNext(); ){
AcMenu acMenuLast = (AcMenu)acMenuListIt.next();
System.out.println("------" + acMenuLast.getMenucode());
}

return operatorList;

} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}

得出的结果是
BASEINFO001

------BASEINFO001
------BASEINFO001
------BASEINFO001

而不是存在数据库里的
------BASEINFO001
------BASEINFO002
------BASEINFO003
  • 打赏
  • 举报
回复
楼主 一般hql语句都需要写别名的,不然啊 会出问题的,所以 以后不管怎样 我都会为每张表加别名。
from AcMenu a where a.menuid in ('2','3','4')
szxiaofei14 2012-06-22
  • 打赏
  • 举报
回复
AcMenu.java

package com.zixuan.acframe.acmenu.domain;



/**
* AcMenu entity.
*
* @author MyEclipse Persistence Tools
*/

public class AcMenu {

// Fields

private String menuid;
private String menuname;
private String menucode;


// Constructors


// Property accessors

public String getMenuid() {
return this.menuid;
}

public void setMenuid(String menuid) {
this.menuid = menuid;
}

public String getMenuname() {
return this.menuname;
}

public void setMenuname(String menuname) {
this.menuname = menuname;
}

public String getMenucode() {
return this.menucode;
}

public void setMenucode(String menucode) {
this.menucode = menucode;
}


}
szxiaofei14 2012-06-22
  • 打赏
  • 举报
回复
AcMenu.hbm.xml


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.zixuan.acframe.acmenu.domain.AcMenu" table="ac_menu" catalog="acframe" lazy= "false">
<id name="menuid" type="java.lang.String">
<column name="MENUID"/>
<generator class="assigned" />
</id>
<property name="menuname" type="java.lang.String">
<column name="MENUNAME" length="40" not-null="true" />
</property>
<property name="menucode" type="java.lang.String">
<column name="MENUCODE" length="40" />
</property>
</class>
</hibernate-mapping>
szxiaofei14 2012-06-22
  • 打赏
  • 举报
回复
麻烦大家帮帮忙,实在不知道为什么
我的hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://192.168.35.3:3306/acframe
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">
zhou1212
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<mapping
resource="com/zixuan/acframe/acmenu/domain/AcMenu.hbm.xml" />
<mapping
</hibernate-configuration>

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧