2011-07-14 97 views
1

我有3個表格:Band,BandGenre和Genre。休眠 - 使用Jointable加入表格

現在,我得到Band加入BandGenre,BandGenre加入風格。這似乎有點多。我讀過各種地方(包括這裏),Hibernate可以找出一個連接表,但我無法弄清楚如何去做。

因此,這裏有我的hbm.xml文件:

Band.hbm.xml

<class name="com.myProject.hibernate.Band" table="Band"> 
     <id name="bandid"> 
      <generator class="increment"/> 
     </id> 
     <property name="name"/> 
     <set name="bandGenres" lazy="false"> 
      <key column="bandid"/> 
      <one-to-many class="com.myProject.hibernate.BandGenre"/> 
     </set> 
    </class> 

BandGenre.hbm.xml(在jointable)

<class name="com.myProject.hibernate.BandGenre" table="BandGenre"> 
     <id name="bandgenreid"> 
      <generator class="increment"/> 
     </id> 
     <property name="bandid"/> 
     <property name="genreid"/> 
     <one-to-one name="genre" class="com.myProject.hibernate.Genre"> 
      <!-- the <formula> gets Hibernate to join Genre on BandGenre.genreid (rather than BandGenre.bandgenreid) --> 
      <formula>genreid</formula> 
     </one-to-one> 
    </class> 

Genre.hbm.xml

<class name="com.myProject.hibernate.Genre" table="Genre"> 
     <id name="genreid"> 
      <generator class="increment"/> 
     </id> 
     <property name="parentid"/> 
     <property name="name"/> 
    </class> 

我該怎麼做才能讓我的寶貝nd直接加入流派(最好是我可以通過parentid訂購)?

回答

0

您可以使用BandGenre作爲join table來加入BandGenre

<class name="com.myProject.hibernate.Band" table="Band"> 
    <id name="bandid"> 
     <generator class="increment"/> 
    </id> 
    <property name="name"/> 
    <set name="genres" lazy="false" table="BandGenre"> 
     <key column="bandid"/> 
     <many-to-many class="com.myProject.hibernate.Genre" column="genreid"/> <!-- add ' unique="true"' for a one-to-many relationship --> 
    </set> 
</class> 

只需修改Band POJO擁有的Genre!而非BandGenre的List。來吧,溝BandGenre.hbm.xml

+0

使用你的代碼我得到一個錯誤:「無法從資源com/bandbrokers/hibernate/Band.hbm.xml解析映射文檔」 - 必須爲元素類型「一對多」聲明「屬性」列「 「。 當然,我有「列」屬性設置就像你的代碼。 – laughingbovine

+0

我正在使用Hibernate 3.2,現在升級到3.6.5.Final並仍然收到相同的錯誤。 – laughingbovine

+0

我的不好。如果一個樂隊真的只能擁有一個流派(而不是多個流派),那麼你必須有一個「多對多」的'unique = true'。答覆修改。 –