您的位置:首页 > 其它

Hibernate笔记之5容器映射之List映射

2009-04-08 16:49 453 查看
容器映射:
容器常用于存储对象,将容器的关系映射到表主要有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) ;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: