2010-09-17 93 views
0

關鍵我不知道是否有可能在Hibernate映射在這樣的方式來定義Set,該元素將在原來的(FOO)表指定不列,但在加入了一個(BAR)。比方說,我們有一些FooContainer.hbm.xml,其中包含FooSet對象:休眠<set>從連接表

<set ...> 
    <key column="COLUMN_FROM_BAR" /> 
    <one-to-many class="xyz.Foo" /> 
</set> 

這裏FOO有FK到BARFOO.BAR_ID),因此接合是在Foo.hbm通過元素來完成。 XML:

<many-to-one class="xyz.Bar" fetch="join" column="BAR_ID" foreign-key="barId" ... /> 

這導致接合FOO-BAR選擇每當xyz.Foo被取出。

問題是,在那裏產生Set獲取選擇的條件是這樣的:

... WHERE _FOO_0.COLUMN_FROM_BAR = ? 

時所需的一個是:

... WHERE _BAR_0.COLUMN_FROM_BAR = ? 
+1

這樣做沒有任何意義:將有兩個表之間沒有聯繫。 – 2010-09-17 09:31:18

+0

DB中有鏈接(FOO引用BAR),並且在hbm中它定義在中。這個關係的細節丟失了,因爲它們與問題無關。 – Ralkie 2010-09-17 10:15:20

回答

1

找到答案在Java Persistence with Hibernate(頁296)。訣竅是從目標類(Foo)設置不同的配置表(BAR):

<set table="BAR" ...> 
    <key column="COLUMN_FROM_BAR" /> 
    <many-to-many 
     class="xyz.Foo" 
     column="BAR_ID" 
     unique="true" 
     /> 
    </set>