hibernate 高级映射 -->张国亮总结第一季

在做持久化类的时候的规定:

1).有一个默认的构造方法;

2).所有的属性都有setter和getter方法

3).有一个对象标识符Oid;

4).如果有集合属性,则必须定义成接口类型:List、Set、Map。不能定义成类类型HashSet、hashMap、ArrayList等

1. Hibernate 高级映射

<set>元素:可以映射java.util.Set接口的属性,元素没有顺序且不允许重复

<list>元素:可以映射java.util.List接口的属性,有顺序,需要在集合属性对应的表中用一个额外的索引保存每个元素的位置

<bag> <idbag>元素:可以映射java.util.Collection接口的属性,元素可重复,但不保存顺序

<map>元素:可以映射java.util.Map接口的属性,元素以键/值对的形式保存,也是无序的

<primitive-array> <array>:可以映射数组元素。

2. 这几个高级映射的主要代码

<set>元素

private Set<String> hobbies;

<set name=“hobbies” table=“student_hobby”>

   <key column=“student_id”/>

  <element type=“string” column=“hobby_name” not-null=“true”/>

</set>

   这里要注意的是:这里所说的set标签不同于前面介绍过的关系映射中的set标签,不知大家注意到没有,这里多了一个element标签但是没有关系类型的标签了;element标签的属性not-null=”true”是不允许字段为空的意思

  <list>元素

private List<String> hobbies;

<list name=“hobbies” table=“student_hobby”>

   <key column=“student_id”/>

  <list-index column=“posistion”/>

  <element type=“string” column=“hobby_name” not-null=“true”/>

</list>

这里要注意的是:list标签与set的标签的映射文件写法看似一样,其实不一样,有一点不同的是,list标签多了list-index标签,这个标签的作用是给表添加一个索引位置,为什么会有多一个这个标签呢!?其实是由list与set的不同决定的,li。st是 有顺序的所以要有一个索引位置来唯一标识,而set没有。

<bag>元素

private Collection<String> hobbies;

<bag name=“hobbies” table=“student_hobby”>

   <key column=“student_id”/>

   <element type=“string” column=“hobby_name” not-null=“true”/>

</bag>

   这里要注意的是:bag标签的作用是达到与list标签同样的功能,但是不多余的产生索引位置的标识。bag标签对应的持久化类中的属性类型是Collection集合类型,即是set、list的父接口,固后者达到的功能前者都能达到。bag主要作用是:想使数据又顺序,但是又不想要那个产生的标识位置的字段。

<map>元素

private Map<Long String> hobbies;

<map name=“hobbies” table=“student_hobby”>

    <key column=“student_id”>

    <map-key column=“hobby_id” type=“long”/>

    <element type=“string” column=“hobby_name” not-null=“true”/>

</map> 

3.  案例分析

   以上是各个xxx.hbm.xml的部分代码,也是核心代码,下面列举一下测试代码。

SetTest.Java

package com.hbsi.set;

 

import java.util.HashSet;

import java.util.Set;

 

import org.hibernate.Session;

import org.junit.Test;

 

import com.hbsi.utils.HibernateSessionFactory;

 

public class SetTest {

 

   @Test

   public void add(){

      

      Session session = HibernateSessionFactory.getSession();

      session.beginTransaction();

      Person p = new Person();

      p.setName("keven");

      

      Set<String> hobbies = new HashSet<String>();

      hobbies.add("sing");

      hobbies.add("dance");

      

      p.setHobbies(hobbies);

      session.save(p);

      

      session.getTransaction().commit();

      HibernateSessionFactory.closeSession();

   }

}

ListTest.java

package com.hbsi.list;

 

import java.util.ArrayList;

import java.util.List;

 

import org.hibernate.Session;

import org.junit.Test;

 

import com.hbsi.utils.HibernateSessionFactory;

 

public class ListTest {

 

   @Test

   public void add(){

      

      Session session = HibernateSessionFactory.getSession();

      session.beginTransaction();

      Person p = new Person();

      p.setName("join");

      

     List<String> hobbies = new ArrayList<String>();

      hobbies.add("backetball");

      hobbies.add("football");

      

      p.setHobbies(hobbies);

      session.save(p);

      

      session.getTransaction().commit();

      HibernateSessionFactory.closeSession();

   }

}

BagTest.java

package com.hbsi.bag;

 

import java.util.ArrayList;

import java.util.List;

 

import org.hibernate.Session;

import org.junit.Test;

 

import com.hbsi.utils.HibernateSessionFactory;

 

public class BagTest {

 

   @Test

   public void add(){

      

      Session session = HibernateSessionFactory.getSession();

      session.beginTransaction();

      Person p = new Person();

      p.setName("keven");

      

     List<String> hobbies = new ArrayList<String>();

      hobbies.add("sing");

      hobbies.add("dance");

      

      p.setHobbies(hobbies);

      session.save(p);

      

      session.getTransaction().commit();

      HibernateSessionFactory.closeSession();

   }

}

MapTest.java

package com.hbsi.map;

 

import java.util.HashMap;

import java.util.Map;

 

import org.hibernate.Session;

import org.junit.Test;

 

import com.hbsi.utils.HibernateSessionFactory;

 

public class MapTest {

 

   @Test

   public void add(){

      

      Session session = HibernateSessionFactory.getSession();

      session.beginTransaction();

      Person p = new Person();

      p.setName("keven");

      

     Map<Integer,String> hobbies = new HashMap<Integer,String>();

      hobbies.put(1,"sing");

      hobbies.put(2,"dance");

      

      p.setHobbies(hobbies);

      session.save(p);

      

      session.getTransaction().commit();

      HibernateSessionFactory.closeSession();

   }

}


posted @ 2012-12-24 19:37  流-星-追-月  阅读(135)  评论(0编辑  收藏  举报