用List 集合属性时候 会生成两张表, 且是根据 PO 类 的 标识属性 (也就是数据库的主键),与 List 集合生成的表 通过外键关联 形成
用例如下:
1:编写PO类
package zhourj.hibernate.list; import java.util.ArrayList; import java.util.List; /* * List 集合的的映射 * 要求持久集合只能申明为 接口 */ public class Person { private Integer id; // 标识属性 private String name; private int age; private List<String> schools = new ArrayList<String>();// 显示初始化 public Integer getId() { return id; } public String getName() { return name; } public int getAge() { return age; } public List<String> getSchools() { return schools; } public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setSchools(List<String> schools) { this.schools = schools; } }
2:编写 Person.hbm.xml 部署文件
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="zhourj.hibernate.list"> <class name="Person" table="person_inf"> <id name="id"> <generator class="identity"></generator> </id> <!-- 映射普通属性 --> <property name="name" type="string" column="person_name"></property> <property name="age" type="int" column="person_age"></property> <!-- 映射List 集合 --> <list name="schools" table="school"> <!-- 映射集合属性 表的外键列 --> <key column="personid" not-null="true"></key> <!-- 映射集合属性表的集合索引列 --> <list-index column="list_order"></list-index> <element type="string" column="school_name"></element> </list> </class> </hibernate-mapping>
3:编写测试类
package zhourj.hibernate.list; import java.util.ArrayList; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import zhorj.hibernate.util.HibernateUtil; public class PersonManager { public void CreateAndStorePerson(){ Session session = HibernateUtil.currentSession(); // 开启事物 Transaction transaction = session.beginTransaction(); Person person = new Person(); person.setAge(23); person.setName("zhourj"); List<String> schools = new ArrayList<String>(); schools.add("湖南工学院"); schools.add("岳阳县二中"); person.setSchools(schools); session.save(person); transaction.commit(); HibernateUtil.closeSession(); } public static void main(String[] args) { new PersonManager().CreateAndStorePerson(); } }
4:运行效果如下: