我有3张桌子:Band,BandGenre和Genre。
现在,我正在Band加入BandGenre,BandGenre加入Genre。这似乎有点多。我已经在不同的地方(包括这里)读过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(加入表)
<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>
如何让乐队直接加入流派(最好是我可以通过parentid订购)?
答案 0 :(得分:0)
您可以将BandGenre用作join table加入Band
和Genre
,就像这样。
<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
的列表。继续,放弃BandGenre.hbm.xml
。