如何使用相同的列hibernate设置多个一对多关系

时间:2015-12-22 17:01:01

标签: java xml hibernate one-to-many hibernate-onetomany

有两个实体。

  1. 路线(到达,到达和离开,离开ID)作为位置
  2. 位置(到达,离港)为路线
  3. 位置与路线表有一对多的关系。

    我想设置。

    Route.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>
    

    Location.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>
    

    即使我在路线中设置了departureID,我也会收到错误,因为departureID为空。

    如何纠正这些映射以便工作

1 个答案:

答案 0 :(得分:-1)

我认为您在抓取时遇到问题:

Lazy="true|false"控制是否急切地或按需加载关联。 fetch="select|subselect|join|batch"控制在需要加载时如何加载该实体或集合。

使用lazy="true"fetch="select" Hibernate会延迟加载集合并使用select加载它。如果设置lazy="false",则会执行相同的选择,不同之处在于它会被急切执行。希望这是有道理的。

尝试设置lazy="false",然后查看您的departureID是否仍为null