hibernate集合映射

<!-----------------------------建立組件類Friends.java-------------------------------------->
package com.michael.model;

import java.util.ArrayList;
import java.util.List;


public class Friends {

private String sex;
private String f_name;
private List<String> cars = newArrayList<String>();
private Person person;

public Friends() {
}

public Friends(String f_name, String sex) {
this.f_name = f_name;
this.sex = sex;
}

public List<String> getCars(){
return cars;
}

public void setCars(List<String>cars) {
this.cars = cars;
}

public Person getPerson() {
return person;
}

public void setPerson(Person person) {
this.person = person;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getF_name() {
return f_name;
}

public void setF_name(String fName) {
f_name = fName;
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj != null &&obj.getClass() == Friends.class) {
Friends target = (Friends) obj;
if (target.getF_name().equals(getF_name())) {
return true;
}
}
return false;
}

@Override
public int hashCode() {
return getF_name().hashCode() * 13 +getSex().hashCode();
}

}
<!-------------------------------建立一個持久化類Person.java-------------------------------->
package com.michael.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

// default package


public class Person {

private String name;
private int age;
private int id;
//list集合
private List<String> schools =new ArrayList<String>();
//set集合
private Set<String> animas = newHashSet<String>();
//map集合
private Map<String, Integer>course = new HashMap<String,Integer>();
//map集合的屬性爲組件
private Map<String, Friends>friends = new HashMap<String,Friends>();
//組件爲map集合的索引
private Map<Friends, Integer>friends2 = new HashMap<Friends,Integer>();
//組件屬性爲集合
private Friends friends1;

public Friends getFriends1() {
return friends1;
}

public void setFriends1(Friends friends1) {
this.friends1 = friends1;
}

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;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public List<String> getSchools(){
return schools;
}

public voidsetSchools(List<String> schools){
this.schools = schools;
}

public Set<String> getAnimas(){
return animas;
}

public voidsetAnimas(Set<String> animas) {
this.animas = animas;
}

public Map<String, Integer>getCourse() {
return course;
}

public void setCourse(Map<String,Integer> course) {
this.course = course;
}


public Map<String, Friends>getFriends() {
return friends;
}

public void setFriends(Map<String,Friends> friends) {
this.friends = friends;
}

public Map<Friends, Integer>getFriends2() {
return friends2;
}

public void setFriends2(Map<Friends,Integer> friends2) {
this.friends2 = friends2;
}

}
<!----------------------------建立持久化類對應的映射文件Person.hbm.xml-------------------------->
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping fileautogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.michael.model.Person"table="person">
 
 <id name="id"type="java.lang.Integer">
 <columnname="id"></column>
 <generatorclass="identity"></generator>
 </id>
 
    <property name="name"type="java.lang.String">
          <column name="name" />
       </property>
       <property name="age"type="java.lang.Integer">
          <column name="age" />
       </property>
       
       <!-- list集合映射-->
      <list name="schools"table="school">
      <key column="personid"not-null="true"></key>
      <list-indexcolumn="list_order"></list-index>
      <element type="string"column="school_name"></element>
      </list>
      
      <!-- 因爲set是無序集合,所以無需配置list-index-->
      <set name="animas"table="animas">
      <keycolumn="person_animas_id"></key>
      <element type="string"column="animas_name"></element>
      </set>
      
      <!-- map集合映射 要配置map-key-->
      <map name="course" table="course">
      <keycolumn="person_course_id"></key>
      <map-key type="string"column="course_name"></map-key>
      <element type="int"column="score"></element>
      </map>
       
       <!-- map集合的屬性爲組件 -->
       <map name="friends"table="friends">
       <keycolumn="person_friends_id"></key>
       <map-key type="string"column="friend_name"></map-key>
       <composite-elementclass="com.michael.model.Friends">
       <parentname="person"/>
       <property name="f_name"></property>
       <property name="sex"></property>
      </composite-element>
       </map>

 <!-- 組件作爲Map的索引 必須得重寫組件類的equals()和hashCode()-->
       <map name="friends2"table="frindes2">
       <keycolumn="person_friends2_id"></key>
       <composite-map-keyclass="com.michael.model.Friends">
       <key-propertyname="f_name"></key-property>
       <key-propertyname="sex"></key-property>
      </composite-map-key>
       <element type="int"column="num"></element>
       </map>
       
       <!-- 組件屬性爲集合-->
       <component name="friends1"class="com.michael.model.Friends">
       <parentname="person"/>
       <propertyname="f_name"></property>
       <propertyname="sex"></property>
       <list name="cars"table="cars">
       <keycolumn="person_cars_id"></key>
       <list-indexcolumn="list_order"></list-index>
       <element type="string"column="car_name" />
       </list>
       </component>
    </class>
</hibernate-mapping>
<!------------------建立一個junit測試--------------------------------->
package com.michael.test;

import junit.framework.TestCase;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;


import com.michael.HibernateSessionFactory;
import com.michael.model.Friends;
import com.michael.model.Person;

public class Test extends TestCase {
public void testOrm(){
Session session = HibernateSessionFactory.getSession();
//映射list集合
List<String> schools = newArrayList<String>();
schools.add("1");
schools.add("2");
schools.add("3");
//映射set集合
Set<String> animas = newHashSet<String>();
animas.add("3");
animas.add("3q");
animas.add("3e");
//映射map集合
Map<String,Integer> course = newHashMap<String,Integer>();
course.put("a", 80);
course.put("b", 90);
course.put("c", 85);
//組件屬性爲集合
List<String> cars = newArrayList<String>();
cars.add("bmw");
cars.add("奔馳");
//map集合屬性爲組件
Friends f = new Friends();
f.setF_name("AA");
f.setSex("男");
f.setCars(cars);
Map<String,Friends> maps = newHashMap<String,Friends>();
maps.put("1", f);
//組件爲map集合的索引
Map<Friends,Integer> maps2 = newHashMap<Friends, Integer>();
maps2.put(f, 45);
Person p  = new Person();
p.setSchools(schools);
p.setAnimas(animas);
p.setCourse(course);
p.setFriends1(f);
p.setFriends(maps);
p.setFriends2(maps2);
Transaction tr = session.beginTransaction();
tr.begin();
session.save(p);
tr.commit();
HibernateSessionFactory.closeSession();
}
}

運行junit測試,如果成功,那麼在各個數據庫表中都會有對應的數據插入。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章