用中介表映射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 关系
最后,代码工程文件作为附件上传