首頁  >  文章  >  Java  >  Hibernate之集合映射詳解

Hibernate之集合映射詳解

零下一度
零下一度原創
2017-06-27 10:18:191326瀏覽

一List映射

如果持久化類別中具有List對象,可以透過映射檔案中的類別4309a73696dbaeac0ddd115cebb6f9b7元素或註解來映射List.

#例如,一個問題有多個答案:

 

1)建立持久化類別

package list;

import java.util.List;

public class Question {
	
	private int id;
	
	private String qname;
	
	private List<String> answers;

	public int getId() {
		return id;
	}

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

	public String getQname() {
		return qname;
	}

	public void setQname(String qname) {
		this.qname = qname;
	}

	public List<String> getAnswers() {
		return answers;
	}

	public void setAnswers(List<String> answers) {
		this.answers = answers;
	}
	
	

}

2)建立對應檔案

<?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?>  
<!DOCTYPE hibernate-mapping PUBLIC  
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

 <hibernate-mapping>  
  <class name="list.Question" table="quesion">  
  	 <cache usage="read-write"/>
    <id name="id">  
     <generator class="increment"></generator>  
    </id>  
    <property name="qname"></property> 
    <list name="answers" table="answers">
    	<key column="qid"></key>
    	<index column="type"></index>
    	<element column="answer" type="string"></element>
    </list>
     
  </class>  

 </hibernate-mapping>

3)在全域設定檔中增加

 	<!-- List of XML mapping files -->
   		<mapping resource="list/Question.hbm.xml"/>

4)測試

package list;

import java.util.ArrayList;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
	
	public static void main(String[] args) {
		
		Configuration cfg = new Configuration();
		cfg.configure("hibernate.cfg.xml");
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();
		
		ArrayList<String> list1 = new ArrayList<String>();
		list1.add("answer1");
		list1.add("answer2");
		
		Question question1  = new Question();
		question1.setQname("question1");
		question1.setAnswers(list1);
		
		session.save(question1);
		
		session.getTransaction().commit();
		session.close();
		
		
		//factory.close();
		
		
	}

}

#二List一對多映射

一個問題有多個答案,每個答案有自己的訊息,需要使用一對多關聯來映射。

1)建立持久化類別

package list;

import java.util.List;

public class Question {
	
	private int id;
	
	private String qname;
	
	private List<Answer> answers;

	public int getId() {
		return id;
	}

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

	public String getQname() {
		return qname;
	}

	public void setQname(String qname) {
		this.qname = qname;
	}

	public List<Answer> getAnswers() {
		return answers;
	}

	public void setAnswers(List<Answer> answers) {
		this.answers = answers;
	}


	
	

}
package list;

public class Answer {
	
	private int id;
	
	private String answername;
	
	private String postedBy;

	public int getId() {
		return id;
	}

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

	public String getAnswername() {
		return answername;
	}

	public void setAnswername(String answername) {
		this.answername = answername;
	}

	public String getPostedBy() {
		return postedBy;
	}

	public void setPostedBy(String postedBy) {
		this.postedBy = postedBy;
	}
	
	

}

2)設定檔

<?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?>  
<!DOCTYPE hibernate-mapping PUBLIC  
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

 <hibernate-mapping>  
  <class name="list.Question" table="quesion">  
  	 <cache usage="read-write"/>
    <id name="id">  
     <generator class="increment"></generator>  
    </id>  
    <property name="qname"></property> 
    <list name="answers" cascade="all">
    	<key column="qid"></key>
    	<index column="type"></index>
    	<one-to-many class="list.Answer"/>
    </list>
   </class>
   
    <class name="list.Answer" table="answers">  
	  	 <cache usage="read-write"/>
	    <id name="id">  
	     <generator class="increment"></generator>  
	    </id>  
	    <property name="answername"></property> 
	    <property name="postedBy"></property>
    </class>  

 </hibernate-mapping>

3 )在hibernate.cfg.xml中新增設定

	 	<!-- List of XML mapping files -->
   		<mapping resource="list/Question.hbm.xml"/>

4)測試

package list;

import java.util.ArrayList;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Test {
	
	public static void main(String[] args) {
		
		Configuration cfg = new Configuration();
		cfg.configure("hibernate.cfg.xml");
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();
		
		Answer ans1 = new Answer();
		ans1.setAnswername("ans1");
		ans1.setPostedBy("post1");
		
		Answer ans2 = new Answer();
		ans2.setAnswername("ans2");
		ans2.setPostedBy("post2");
		
		Answer ans3 = new Answer();
		ans3.setAnswername("ans3");
		ans3.setPostedBy("post3");
		ArrayList<Answer> list1 = new ArrayList<Answer>();
		list1.add(ans1);
		list1.add(ans2);
		list1.add(ans3);
		Question question1  = new Question();
		question1.setQname("question1");
		question1.setAnswers(list1);
		session.save(question1);
		session.getTransaction().commit();
		session.close();
		//factory.close();
			
	}
}

以上是Hibernate之集合映射詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn