用中介表映射many to many 的两种方式
1使用中介表,但不使用中介类。
2使用中介表,也使用中介类。
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hibernate.entity.User" table="user" catalog="hibernate">
<id name="userId" type="java.lang.Long">
<column name="USER_ID" precision="10" scale="0" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" not-null="true" />
</property>
<!-- 共享主键方式映射 one to one 注意 class 要用完整类名-->
<one-to-one name="relAddress" class="com.hibernate.entity.Address" cascade="save-update"></one-to-one>
<!-- 单独列外键通过many to one + unique 属性方式映射 one to one 注意 class 要用完整类名-->
<many-to-one name="account" class="com.hibernate.entity.Account" column="USER_ACCOUNT_ID" unique="true" cascade="save-update"></many-to-one>
<!-- 通过中介表及中介类映射User 与 Item 的 many to many 关系 -->
<set name="itemUser" cascade="save-update" inverse="true">
<key column="USER_ID"></key>
<one-to-many class="com.hibernate.entity.ItemUser"/>
</set>
</class>
</hibernate-mapping>
Item.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hibernate.entity.Item" table="item" catalog="hibernate">
<id name="itemId" type="java.lang.Long">
<column name="ITEM_ID" precision="10" scale="0" />
<generator class="assigned" />
</id>
<property name="itemName" type="java.lang.String">
<column name="ITEM_NAME" not-null="true" />
</property>
<!-- one to many -->
<bag name="bids" cascade="save-update" inverse="true">
<key column="ITEM_ID"></key>
<one-to-many class="com.hibernate.entity.Bid"/>
</bag>
<!-- 使用中介表而不使用中介实体类的Many to Many 映射 -->
<set name="categories" table="CATEGORY_ITEM" inverse="true" cascade="save-update">
<key column="ITEM_ID"></key>
<many-to-many class="com.hibernate.entity.Categary" column="CATEGORY_ID"></many-to-many>
</set>
<!-- 使用中介表类实现 User 与 Item 的many to many 映射 -->
<set name="itemUser" cascade="save-update" inverse="true">
<key column="ITEM_ID"></key>
<one-to-many class="com.hibernate.entity.ItemUser"/>
</set>
</class>
</hibernate-mapping>
ItemUser.hbm.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibernate.entity.ItemUser" table="item_user" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<many-to-one name="item" column="ITEM_ID" class="com.hibernate.entity.Item" />
<many-to-one name="user" column="USER_ID" class="com.hibernate.entity.User" />
</class>
</hibernate-mapping>
Item 与 User 使用了中介类ItemUser来映射many to many 关系
categary.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.hibernate.entity.Categary" table="categary" catalog="hibernate">
<id name="categoryId" type="java.lang.Long">
<column name="CATEGORY_ID" precision="10" scale="0" />
<generator class="assigned" />
</id>
<property name="categoryName" type="java.lang.String">
<column name="CATEGORY_NAME" />
</property>
<!-- 使用中介表而不使用中介实体类的Many to Many 映射 -->
<set name="items" table="CATEGORY_ITEM" cascade="save-update">
<key column="CATEGORY_ID"></key>
<many-to-many class="com.hibernate.entity.Item" column="ITEM_ID"></many-to-many>
</set>
</class>
</hibernate-mapping>
Item 与 Categary 使用中介表,但不使用中介表的entity来映射many to many 关系
最后,代码工程文件作为附件上传
本文详细介绍了使用中介表映射manytomany关系的两种方法:一种是使用实体类,另一种是不使用实体类。通过配置XML文件展示具体实现细节,包括实体类定义、属性映射和关系建立。
1116

被折叠的 条评论
为什么被折叠?



