- Many to Many 映射关系(没尝试映射hibernate支持的java类型)
- 双向多对多外键关联(XML/Annotation) (xml和annotation都实现了)
- 单向多对多外键关联(XML/Annotation) (xml和annotation都实现了)
注: Project中使用XML/Annotation时应统一
一、双向多对多外键关联(XML/Annotation)
例子:多个人共同拥有多本书,多本书被多个人拥有,可相互查找修改信息
类属性变化:Book类需要添加泛型为User类的set,User类需要添加泛型为Book类的set,并提供get和set方法
- XML:
User类
<hibernate-mapping>
<class name="test.User" table="hbn_user" >
<set name="books" table="hbn_users_books" >
<key column="uid"/>
<many-to-many class="test.Book" column="bid" />
</set>
</class>
</hibernate-mapping>
<!-- set中的name:该类属性名;
table:连接表表名;key中的column:本类在连接表的名字,连接User表的主键key;
many-to-many中的column:column是连接表中多对多列的列名,class寻找Book类的主键
-->
Book类
<hibernate-mapping>
<class name="test.Book" table="hbn_book" >
<set name="users" table="hbn_users_books" >
<key column="bid"/>
<many-to-many class="test.User" column="uid" />
</set>
</class>
</hibernate-mapping>
- Annotation:
User类
@ManyToMany()
@JoinTable(name="hbn_user_book",
joinColumns= {@JoinColumn(name="user_id")}, //命名关联本表id的字段
inverseJoinColumns= {@JoinColumn(name="book_id")}
)
private Set<Book> books = new HashSet<Book>();
Book类
@ManyToMany()
@JoinTable(name="hbn_user_book",
joinColumns= {@JoinColumn(name="book_id")},
inverseJoinColumns= {@JoinColumn(name="user_id")}
)
private Set<User> users = new HashSet<User>();
二、单向多对多外键关联(XML/Annotation)
通过省略一方的映射完成