如果持久化類別中具有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(); } }
一個問題有多個答案,每個答案有自己的訊息,需要使用一對多關聯來映射。
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之集合映射詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!