难到这是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";
...全文
708 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingnights 2007-09-26
  • 打赏
  • 举报
回复
<composite-id>标签是作为联合标识符,也相当于<id>标签的作用,那这个标签里的属性也就被Hibernate理解为是联合主键,你要通过对象属性进行查询,就会报not resolve property的错误,这不是Hibernate的Bug。
tcmis 2007-06-26
  • 打赏
  • 举报
回复
问题是冒解决,可能这问题太难,或者真正了解Hibernate的人很少。。
li_d_s 2007-05-29
  • 打赏
  • 举报
回复
表没有主键,所有的字段都被藏到你的XXXId.java里面了...建个主键重新生成下hbm。。。
自然80 2007-05-29
  • 打赏
  • 举报
回复
com.ems.database.hibernate3.pojo.VExamSubjects
tcmis 2007-05-29
  • 打赏
  • 举报
回复
是个视图呢 ,
maginn 2007-05-28
  • 打赏
  • 举报
回复
看看你的ormaping中的文件VSubjects .hbm.xml 字段的名字 是什么啊,就是什么
对应的pojo类的get set方法也要有对应!
自然80 2007-05-28
  • 打赏
  • 举报
回复
not resolve property: fkExamName
检查一下个有关找个属性得 配置,还有它得get,set方法
tcmis 2007-05-28
  • 打赏
  • 举报
回复
<?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>
tcmis 2007-05-28
  • 打赏
  • 举报
回复
楼上的兄弟,你说的加别名,然后用别名.对象属性,我前面就试过了。。通不过的。
下面是错误,无法识别属性,,你看到我的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]
...
maginn 2007-05-28
  • 打赏
  • 举报
回复
是这样的,
如果你不写对象名称,直接写字段,那么hibernate就按照数据库字段进行查找

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

这是hibernate的灵活之处!!


hql2:修改位

sql = " from VSubjects as V where V.fkExamName = ? order by V.cnumber, V.mnumber desc";

( fkExamName为 ormapping中的 属性名称 )
maginn 2007-05-28
  • 打赏
  • 举报
回复
把你的 对应的 .hbm.xml 文件发上了看看
maginn 2007-05-28
  • 打赏
  • 举报
回复
把你的 对应的 .hbm.xml 文件发上了看看
tcmis 2007-05-28
  • 打赏
  • 举报
回复
搞不懂的是
hql1:
sql = " from VSubjects where fk_Exam_Name = ? order by cnumber, mnumber desc";
用视图字段名是可以的fk_Exam_Name。。??为什么
tcmis 2007-05-28
  • 打赏
  • 举报
回复
这个大家放心,我都检查过了,,在pojo类中确实是fkExamName,而且也有get/set方法。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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