標籤:分享 ns2 png list conf pac 全域配置 tor pre
一 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之集合映射