2 heiyee heiyee 于 2013.10.07 16:45 提问

关于HQL和SQL查询的问题

这是配置文件user.hbm
`

  <class name="com.entity.User" table="user">
                        <id name="email" column="email" type="string" length="100">
                            <generator class="assigned"></generator>
                        </id>
                        <property name="username" column="username" type="string"></property>
                        <property name="age" column="age" type="integer"></property>
                        <property name="sex" column="sex" type="integer"></property>

                        <set name="topic" cascade="all">
                            <key column="user_id" foreign-key="email"></key>
                            <one-to-many class="com.jiandan.entity.Topic" />
                        </set>                      
 </class>`

这是topic类的配置文件

 <class name="com.entity.Topic" table="topic">
                    <id column="id" name="id" type="string" length="100">
                        <generator class="uuid"></generator>
                    </id>
                    <property name="content" column="content" type="string"></property>
                    <property name="post_date" column="post_date" type="java.util.Date"></property>
                    <many-to-one class="com.jiandan.entity.User" name="user_id" column="user_id" ></many-to-one>
                  <set name="response" cascade="all">
                        <key column="topic_id"></key>
                        <one-to-many class="com.jiandan.entity.Response"/>
                    </set>
   </class> 

当我使用这种查询方式时就会出错:

Query query = session.createQuery("from Topic where user_id='Clement@gmail.com'");
List topic = query.list();
for(Topic t : topic){
System.out.println(t.getContent());
}
错误信息:

2013-10-7 16:34:24 org.hibernate.property.BasicPropertyAccessor$BasicSetter set
ERROR: HHH000123: IllegalArgumentException in class: com.jiandan.entity.Topic, setter method of property: user_id
2013-10-7 16:34:24 org.hibernate.property.BasicPropertyAccessor$BasicSetter set
ERROR: HHH000091: Expected type: java.lang.String, actual value: com.jiandan.entity.User_$$_javassist_0
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.jiandan.entity.Topic.user_id

但是使用sql的方式却可以查出结果:

SQLQuery sql = session.createSQLQuery("select * from Topic where user_id = 'Clement@gmail.com'");
        List<Object[]> topic = sql.list();
        for(Object[] t : topic){
            int len = t.length;
            for(int i=0; i<len;i++){
                System.out.println(t[i]);
            }
        }

谁能帮我解决这个问题,非常感谢!

1个回答

yy8093
yy8093   2015.01.26 14:28

Topic.user_id 的setter有问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Hibernate QBC与HQL优缺点
QBC 全称:Query By Criteria HQL 全称:Hibernate Query Language HQL优点:与sql相近,可读性好,功能强大,效率高。 HQL缺点:字符串形式,只有在运行时才被解析,扩展性差。 QBC优点:提供面向对象的接口,编译时就可被解析,便于排错调试,扩展性好,允许用户扩展Criteria接口. QBC缺点:可读性差,功能没有HQL强大,不支持报表
Hibernate深入理解----Hibernate 检索方式(HQL,QBC,本地SQL)
参考代码下载github:https://github.com/changwensir/java-ee/tree/master/hibernate4 •Hibernate 提供了以下几种检索对象的方式     –导航对象图检索方式:  根据已经加载的对象导航到其他对象     –OID 检索方式:  按照对象的OID来检索对象,     –HQL 检索方式: 使用面向对象的
Eclipse使用hibernate进行HQL语句查询时,速度慢的原因之一
Eclipse使用hibernate进行HQL语句查询时,速度慢的原因之一
Hibernate三大类查询总结
第一:关于cretiria的查询 第二:HQL查询 第三,本地SQL查询
HQL和SQL查询的结果不一致问题!!!
HQL和SQL查询的结果不一致问题!!!
Hibernate中关于多表连接查询hql 和 sql 返回值集合中对象问题
昨晚帮同事看代码到凌晨2点多,今早6点醒来发现他发来信息说报空指针错误,实在无法入睡,起来自己测试了一下,控制台还真的报: 2009-4-25 8:12:34 org.apache.catalina.core.ApplicationContext log 信息: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast
Sql或者hql 查询时 需要多条件时可以使用嵌套查询
例如:from navigation n where n.class_2_number in(select n.id from n where n.visible='1')
hibernate 模糊查询及not in子查询
代码如下Query query1=this.getSession().createSQLQuery(" select p.smallClassId as smallClassId,p.id as id,p.name as name,p.thumbNail as thumbNail,p.marketPrice as marketPrice,p.memberPrice as memberPrice f
Hibernate中HQL命名查询和SQL命名查询
一、HQL中的命名查询 在class配置文件外<query name="findEmpById"> <![CDATA[from Emp where empNo=:empNo]]> </query> @org.junit.Test //HQL命名查询,通过配置文件 public void findEmpById(){ session=HibernateUtil.
Hibernate(一)HQL查询、原生sql查询
Hibernate中支持三种查询方式:HQL(Hibernate Query Language),原生sql查询,Criteria查询。HQL是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象、属性的概念;原生sql查询就是我们程序员手动的写sql语句并执行;Criteria查询又称为对象查询,采用真正的面向对象的方式进行查询,原生sql查询和Criteria查询将在后续篇章中进行讲解