如何使用同一列休眠设置多个一对多关系
Posted
技术标签:
【中文标题】如何使用同一列休眠设置多个一对多关系【英文标题】:how to set Multiple one to many relation with same column hibernate 【发布时间】:2015-12-22 17:01:00 【问题描述】:有两个实体。
-
Route(Arrival、ArrivalID 和 Departure、DepartureID)作为位置
位置(到达、出发)作为路线
位置与路由表是一对多的关系。
我正在尝试设置。
路由.xml
<many-to-one name="departure" class="com.nakisa.agency.Location" fetch="select" insert="false" update="false">
<column name="locationID" not-null="true" />
</many-to-one>
<many-to-one name="arrival" class="com.nakisa.agency.Location" fetch="select" insert="false" update="false">
<column name="locationID" not-null="true" />
</many-to-one>
位置.xml
<set name="arrivals" table="Routes" inverse="true" lazy="true" fetch="select">
<key>
<column name="arrivalID" not-null="true" />
</key>
<one-to-many class="com.nakisa.agency.Route" />
</set>
<set name="departures" table="Routes" inverse="true" lazy="true" fetch="select">
<key>
<column name="departureID" not-null="true" />
</key>
<one-to-many class="com.nakisa.agency.Route" />
</set>
即使我在路线中设置了departmentID,但由于departmentID 为null,我收到错误消息。
如何更正这些映射才能正常工作
【问题讨论】:
【参考方案1】:我认为您在获取时遇到了问题:
Lazy="true|false"
控制关联是立即加载还是按需加载。
fetch="select|subselect|join|batch"
控制实体或集合在需要加载时如何加载。
使用lazy="true"
和fetch="select"
,Hibernate 将延迟加载集合并使用选择加载它。如果你设置lazy="false"
,同样的选择会被执行,不同的是它会被急切地执行。希望这是有道理的。
尝试设置lazy="false"
,然后看看你的departureID
是不是还是null
。
【讨论】:
以上是关于如何使用同一列休眠设置多个一对多关系的主要内容,如果未能解决你的问题,请参考以下文章