//實體類關係是一個用戶對應多個地址 public class User { private int id; private String name; private double money; private int count ; private Set<Address> address; // 提供對應的get/set方法 ... } public class Address { private int id; private String ip; private String name; private User user; // 提供對應的get/set方法 ... } xml配置文件內容 <hibernate-mapping package="org.com.core.pojo"> <class name="User" table="saber"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" /> <property name="money" type="double"/> <!-- cascade 級聯操做 all表示因此操做都跟關聯表一塊兒 inverse 表示關係控制權交給哪一個管理,這裏表示交個從表來管理 配置多的一面的時候要使用set,key是指定外鍵名的 --> <set name="address" inverse="true" cascade="all"> <key column="u_id"/> <one-to-many class="Address"/> </set> </class> <!-- 指定實體類的表 --> <class name="Address" table="t_sys_address"> <!-- 配置表的屬性 --> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="ip" /> <property name="name"/> <!-- 關聯多對一的配置根據實體類中的屬性名指定 --> <many-to-one name="user" column="u_id"/> </class> </hibernate-mapping>
package org.com.core.controller; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.com.core.dao.BaseDao; import org.com.core.pojo.Address; import org.com.core.pojo.User; // 測試類 public class OneToMany extends BaseDao{ public static void main(String[] args) { selectMany(); } //插入數據 public static void save(){ getSession(); User u = new User("one", 123); Address a1 = new Address("1111","heh1"); Address a2 = new Address("2222","heh2"); Address a3 = new Address("3333","heh3"); Address a4 = new Address("4444","heh4"); //將多個地址放入到set中 Set<Address> set = new HashSet<Address>(); set.add(a1); set.add(a2); set.add(a3); set.add(a4); //用戶與地址創建關係 u.setAddress(set); //地址與用戶創建關係 a1.setUser(u); a2.setUser(u); a3.setUser(u); a4.setUser(u); //開啓事務 tx = session.beginTransaction(); //保存數據 session.save(u); tx.commit(); session.close(); sessionFactory.close(); } //經過從表查主表 public static void selectOne(){ getSession(); Address address = session.get(Address.class, 8); System.out.println(address.getUser()); session.close(); sessionFactory.close(); } //經過主表查從表 public static void selectMany(){ getSession(); User user = session.get(User.class,29); System.out.println(user); System.out.println("==================="); Iterator<Address> it = user.getAddress().iterator(); while (it.hasNext()) { Address a = it.next(); System.out.println(a); } session.close(); sessionFactory.close(); } }