• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Hibernate之集合映射详解

java 搞代码 4年前 (2022-01-09) 10次浏览 已收录 0个评论

一 List映射

如果持久化类中具有List对象,可以通过映射文件中的类<list>元素或注解来映射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='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">   <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='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">   <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");		Ar<div>本文来源gaodai^.ma#com搞#代!码网</div>rayList<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之集合映射详解的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Hibernate之集合映射详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址