ホームページ >Java >&#&チュートリアル >Hibernate コレクション マッピングの詳細な説明
永続クラスに List オブジェクトがある場合、マッピング ファイル内のクラス 4309a73696dbaeac0ddd115cebb6f9b7 アノテーションを通じてリストをマッピングできます。
たとえば、質問には複数の回答があります:
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 対多の関連付けを使用してマッピングする必要があります。
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 中国語 Web サイトの他の関連記事を参照してください。