您的位置:程序门 -> java -> 框架、开源



难到这是hibernate的bug


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


难到这是hibernate的bug[已结贴,结贴人:tcmis]
发表于:2007-05-28 09:05:53 楼主
我数据库(oralce)建了一个视图,v_subjects,用hibernate映射的时候生成了5个文件
abstractvsubjects.java
abstractvsubjectsid.java
vsubjects.java
vsubjectsid.java
vsubjects.hbm.xml
然后我写dao查询视图数据,发现在from的时候是个对象名,然后在写where条件的时候,用对象的字段名是通不过,用数据库视图的字段名是可以通过的。怎么会这样,我用的hql语言,不是直接的sql,下面的语句,hql2是错误的。高手知道原因吗?

hql1:
    sql   =   "   from   vsubjects     where   fk_exam_name   =   ?   order   by   cnumber,   mnumber   desc ";
hql2:
    sql   =   "   from   vsubjects     where   fkexamname   =   ?   order   by   cnumber,   mnumber   desc ";
发表于:2007-05-28 09:44:411楼 得分:20
是这样的,
如果你不写对象名称,直接写字段,那么hibernate就按照数据库字段进行查找

如果你写   (对象名.对象属性),那么hibernate就按照ormapping中的映射字段进行查找

这是hibernate的灵活之处!!


hql2:修改位

    sql   =   "   from   vsubjects   as   v     where   v.fkexamname   =   ?   order   by   v.cnumber,   v.mnumber   desc ";

(   fkexamname为   ormapping中的   属性名称   )
发表于:2007-05-28 09:54:462楼 得分:0
楼上的兄弟,你说的加别名,然后用别名.对象属性,我前面就试过了。。通不过的。
下面是错误,无法识别属性,,你看到我的hql没有,我前面是对象名,后面的是数据库视图的字段名,正常情况下写hql,用的都是对象的属性啊。。
org.springframework.orm.hibernate3.hibernatequeryexception:   could   not   resolve   property:   fkexamname   of:   com.ems.database.hibernate3.pojo.vexamsubjects   [   from   com.ems.database.hibernate3.pojo.vexamsubjects   as   v   where   v.fkexamname   =   ?   order   by   cnumber,   mnumber   desc];   nested   exception   is   org.hibernate.queryexception:   could   not   resolve   property:   fkexamname   of:   com.ems.database.hibernate3.pojo.vexamsubjects   [   from   com.ems.database.hibernate3.pojo.vexamsubjects   as   v   where   v.fkexamname   =   ?   order   by   cnumber,   mnumber   desc]
org.hibernate.queryexception:   could   not   resolve   property:   fkexamname   of:   com.ems.database.hibernate3.pojo.vexamsubjects   [   from   com.ems.database.hibernate3.pojo.vexamsubjects   as   v   where   v.fkexamname   =   ?   order   by   cnumber,   mnumber   desc]
...
发表于:2007-05-28 10:40:423楼 得分:10
not   resolve   property:   fkexamname  
检查一下个有关找个属性得   配置,还有它得get,set方法
发表于:2007-05-28 10:49:104楼 得分:0
看看你的ormaping中的文件vsubjects   .hbm.xml   字段的名字   是什么啊,就是什么
对应的pojo类的get   set方法也要有对应!
发表于:2007-05-28 13:26:355楼 得分:0
这个大家放心,我都检查过了,,在pojo类中确实是fkexamname,而且也有get/set方法。
发表于:2007-05-28 13:27:596楼 得分:0
搞不懂的是
hql1:
    sql   =   "   from   vsubjects     where   fk_exam_name   =   ?   order   by   cnumber,   mnumber   desc ";
用视图字段名是可以的fk_exam_name。。??为什么
发表于:2007-05-28 13:34:587楼 得分:10
把你的   对应的   .hbm.xml   文件发上了看看
发表于:2007-05-28 13:35:368楼 得分:0
把你的   对应的   .hbm.xml   文件发上了看看
发表于:2007-05-28 22:34:349楼 得分:0
<?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   -   hibernate   tools
-->
<hibernate-mapping>
        <class   name= "com.ems.database.hibernate3.pojo.vsubjects "   table= "v_subjects "   schema= "ems ">
                <composite-id   name= "id "   class= "com.ems.database.hibernate3.pojo.vsubjectsid ">
                        <key-property   name= "classpk "   type= "string ">
                                <column   name= "classpk "   length= "32 "   />
                        </key-property>
                        <key-property   name= "name "   type= "string ">
                                <column   name= "name "   length= "50 "   />
                        </key-property>
                        <key-property   name= "pk "   type= "string ">
                                <column   name= "pk "   length= "32 "   />
                        </key-property>
                        <key-property   name= "fkexamname "   type= "string ">
                                <column   name= "fk_exam_name "   length= "32 "   />
                        </key-property>
                        <key-property   name= "subject "   type= "string ">
                                <column   name= "subject "   length= "50 "   />
                        </key-property>
                        <key-property   name= "fksetpaperteacher "   type= "string ">
                                <column   name= "fk_set_paper_teacher "   length= "32 "   />
                        </key-property>
                        <key-property   name= "isntunifiedsubject "   type= "string ">
                                <column   name= "isnt_unified_subject "   length= "4 "   />
                        </key-property>
                        <key-property   name= "subjectalias "   type= "string ">
                                <column   name= "subject_alias "   length= "50 "   />
                        </key-property>
                        <key-property   name= "cnumber "   type= "long ">
                                <column   name= "cnumber "   precision= "22 "   scale= "0 "   />
                        </key-property>
                        <key-property   name= "unumber "   type= "long ">
                                <column   name= "unumber "   precision= "22 "   scale= "0 "   />
                        </key-property>
                        <key-property   name= "mnumber "   type= "long ">
                                <column   name= "mnumber "   precision= "22 "   scale= "0 "   />
                        </key-property>
                        <key-property   name= "nnumber "   type= "long ">
                                <column   name= "nnumber "   precision= "22 "   scale= "0 "   />
                        </key-property>
                </composite-id>
        </class>
</hibernate-mapping>
发表于:2007-05-29 12:02:2410楼 得分:10
com.ems.database.hibernate3.pojo.vexamsubjects
发表于:2007-05-29 12:10:5811楼 得分:10
表没有主键,所有的字段都被藏到你的xxxid.java里面了...建个主键重新生成下hbm。。。
发表于:2007-05-29 20:07:1512楼 得分:0
是个视图呢   ,
发表于:2007-06-26 08:44:4413楼 得分:0
问题是冒解决,可能这问题太难,或者真正了解hibernate的人很少。。
发表于:2007-09-26 16:41:3714楼 得分:0
<composite-id> 标签是作为联合标识符,也相当于 <id> 标签的作用,那这个标签里的属性也就被hibernate理解为是联合主键,你要通过对象属性进行查询,就会报not   resolve   property的错误,这不是hibernate的bug。


快速检索

最新资讯
热门点击