Hibernate 之List ,Bag,Map三种映射文件详解 (二)

2014-11-24 11:03:53 · 作者: · 浏览: 5
ic class ListTest {

/**
* @param args
*/
public static void main(String[] args) {

Session session = HibernateSessionFactory.openSession();
Transaction tx = session.beginTransaction();

House house = new House();
house.setLocation("ShiShou city,Hb Province,China");
house.setRooms(new ArrayList());

Room roomA = new Room();
roomA.setNumber("510");

Room roomB = new Room();
roomB.setNumber("502");

house.getRooms().add(roomA);
house.getRooms().add(roomB);
try
{
session.save(house);
tx.commit();

}
catch(Exception ex)
{
ex.printStackTrace();
if(tx != null)
{
tx.rollback();
}
}
finally
{
session.close();
}


}

}

public class ListTest {

/**
* @param args
*/
public static void main(String[] args) {

Session session = HibernateSessionFactory.openSession();
Transaction tx = session.beginTransaction();

House house = new House();
house.setLocation("ShiShou city,Hb Province,China");
house.setRooms(new ArrayList());

Room roomA = new Room();
roomA.setNumber("510");

Room roomB = new Room();
roomB.setNumber("502");

house.getRooms().add(roomA);
house.getRooms().add(roomB);
try
{
session.save(house);
tx.commit();

}
catch(Exception ex)
{
ex.printStackTrace();
if(tx != null)
{
tx.rollback();
}
}
finally
{
session.close();
}

}

}


下面是数据库表的截图,可以看出index_的值分别为0,1表示了房间510和502的先后插入。


Bag类型,仍然以house和room为例,
bag和list在程序的编写上极为相似,所以在House类和room类都不要修改,但是需要说明的是,我们前面所说的set和list在java都有对应的类或者接口,在hibernate中使用list来模拟bag,所以room类中,不要任何的修改,因此我们需要修改的就只是House.hbm.xml文件了,下面是House.hbm.xml.
[html]
< xml version="1.0" encoding="UTF-8" >
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">














< xml version="1.0" encoding="UTF-8" >
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">












与list相比,只是少了一个index标签,这也就表明了bag是没有顺序,那么相同的程序运行结果截图如下。


对比两个运行的结果,就可以看出bag中并没有记录数据插入的顺序。


Map映射文件
第一种情况,这种情况下map的key-value中的value为可以直接映射到数据库中的类型,例如string(数据库中为char,varchar等)。下面以班级为例,班级中有students, 类型为map,下面是banji类的代码
[java]
package com.example.domain;

import java.util.HashMap;
import java.util.Map;

public class Banji {

private String id;

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

private Map students = new HashMap();

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}



public Map getStudents() {
return students;
}

public void setStudents(Map students) {
this.students = students;
}


}

package com.example.domain;

import java.util.HashMap;
import java.util.Map;

public class Banji {

private String id;