Hibernate之集合映射详解

一 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");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之集合映射详解的详细内容,更多请关注其它相关文章!

我们什么都没有,唯一的本钱就是青春。

Hibernate之集合映射详解

相关文章:

你感兴趣的文章:

标签云: