一XML文件两个many to one映射带出的问题(hibernate)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一XML文件两个many to one映射带出的问题(hibernate)相关的知识,希望对你有一定的参考价值。
表字段:id father_id name photo manfather_id
XML映射文件部分:
<id name="id" column="id" type="int">
<generator class="increment"/>
</id>
<property name="name" column="name" type="string"/>
<property name="photo" column="photo" type="string"/>
<many-to-one name="fatherSort" column="father_id" class="mrgf.hibernate.MerchandiseSort" lazy="false"/>
<set name="sonSorts" cascade="all" lazy="false" inverse="true" order-by="id asc">
<key column="father_id"/>
<one-to-many class="mrgf.hibernate.MerchandiseSort"/>
</set>
<many-to-one name="manfatherSort" column="manfather_id" class="mrgf.hibernate.MerchandiseSort" lazy="false"/>
<set name="mansonSorts" cascade="all" lazy="false" inverse="true" order-by="id asc">
<key column="manfather_id"/>
<one-to-many class="mrgf.hibernate.MerchandiseSort"/>
</set>
出错的原因:我多加了个manfather_id字段,然后在XML映射文件里加入了
<many-to-one name="manfatherSort" column="manfather_id" class="mrgf.hibernate.MerchandiseSort" lazy="false"/>
<set name="mansonSorts" cascade="all" lazy="false" inverse="true" order-by="id asc">
<key column="manfather_id"/>
<one-to-many class="mrgf.hibernate.MerchandiseSort"/>
</set>
就会出现org.hibernate.exception.SQLGrammarException:could not execute query的异常
Caused by:java.sql.SQLException:...列名"manfatherSort"无效
自己的分析:get/set等我都做好了,难道是一个XML文件中不能存在两个many to one映射?还是one to many那指向了同一个class所以出错了么?但也没理由说"manfatherSort"那无效吧...望各位大大们给点意见,新手没分,祝参与的各位事业顺利好了,先谢谢大家的帮忙
发现问题的根本了,sql语句调用不了many to one里的字段啊,就是fatherSort和manfatherSort都不能用sql语句调用,注意,这两个字段的都是用表名声明的,问题知道了,可惜解决不了,我现在需要的是在sql语句里用manfatherSort这个属性做一个判断,不知道应该怎么才能用呢,例如:from xxx表 where manfatherSort is not null; 注意这里manfatherSort会报错,提示列名无效...
请问第二个回答者:
不要?那是我新增加的字段啊...我就是要怎么才能在hql语句里面使用manfatherSort(column="manfather_id")
<many-to-one name="manfatherSort" column="manfather_id" class="mrgf.hibernate.MerchandiseSort" lazy="false"/>
---这个根本就是多余的。可以不要。!
上面以经有一个SET了
<set name="sonSorts" cascade="all" lazy="false" inverse="true" order-by="id asc">
<key column="father_id"/>
<one-to-many class="mrgf.hibernate.MerchandiseSort"/>
</set>
HQL:
from XXX a where a.sonSorts is not null;
这样可以查出你想要的那个结果!! 参考技术A 关注中..我也郁闷这个问题...有时碰到
以上是关于一XML文件两个many to one映射带出的问题(hibernate)的主要内容,如果未能解决你的问题,请参考以下文章
JPA关系映射之one-to-many和many-to-one
Hibernate关系映射之many-to-many(多对多)