用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:运行效果如下: