容器映射:
容器常用于存储对象,将容器的关系映射到表主要有Set,List和Map三种。
例二,List映射:某个人有多本书,但是也可能有基本是相同的书:
首先创建数据库:
-- 删除表
drop table person ;
drop table books ;
-- 创建表
CREATE TABLE person
(
id INT AUTO_INCREMENT PRIMARY KEY NOT NULL ,
name VARCHAR(20)
) ;
CREATE TABLE books
(
id INT ,
posit int ,
title VARCHAR(30) ,
foreign key (id) references person(id) on delete cascade
) ;
创建POJO类:Person
package wjr.hibernate.demo20_22.list;
import java.util.List;
public class Person {
private int id;
private String name;
private List books;
public List getBooks() {
return books;
}
public void setBooks(List books) {
this.books = books;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后创建映射文件:
<?xml version="1.0"?>
<!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 - Hibernate Tools
-->
<hibernate-mapping>
<class name="wjr.hibernate.demo20_22.list.Person" table="person" catalog="huanhuan">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="20" />
</property>
<list name="books" table="books">
<key column="id"></key>
<index column="posit"></index>
<element type="java.lang.String" column="title"></element>
</list>
</class>
</hibernate-mapping>
最后就是创建操作类了:
package wjr.hibernate.demo20_22.list;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
public class PersonOperate {
private Session session;
public PersonOperate() {
this.session = new Configuration().configure().buildSessionFactory()
.openSession();
}
// 添加人员
public void insert(Person per) {
this.session.save(per);
this.session.beginTransaction().commit();
}
// 根据ID查询人员信息
public Person queryById(int id) {
Person p = null;
String hql = "FROM Person AS p where p.id=?";
Query q = this.session.createQuery(hql);
q.setInteger(0, id);
List all = q.list();
if (all.size() > 0) {
p = (Person) all.get(0);
}
return p;
}
public void update(Person per)
{
this.session.update(per) ;
this.session.beginTransaction().commit() ;
}
/**
* @param args
*/
public static void main(String[] args) {
PersonOperate po = new PersonOperate();
// Person p = new Person();
// p.setName("LiXingHua");
// p.setBooks(new ArrayList());
// p.getBooks().add("Java 核心技术");
// p.getBooks().add("Java 核心技术");
// p.getBooks().add("Java 核心技术");
// p.getBooks().add("Java 核心技术");
// p.getBooks().add("Java 核心技术");
// p.getBooks().add("Oracle PL SQL编程");
// p.getBooks().add("WebSphere 开发指南");
//
// po.insert(p);
Person p = po.queryById(2);
// System.out.println("姓名:" + p.getName());
// Iterator iter = p.getBooks().iterator() ;
// while(iter.hasNext())
// {
// System.out.println(" |- "+iter.next()) ;
// }
p.getBooks().add("JSP 核心技术") ;
p.getBooks().add("JSP 核心技术") ;
p.getBooks().add("JSP 核心技术") ;
po.update(p) ;
}
}