標籤:-- property logs key utils one 一對一 學生 etc
①:list 還是用學生和班級舉例子,list是將學生添加進list集合時的順序
Clazz類
public class Clazz { private Long id; private String name; private List<Student> stus = new ArrayList<>();}
Student類:
public class Student { private Long id; private String name; private Clazz clz;//Clazz類為Student的欄位}
Clazz.hbm.xml;
<hibernate-mapping package="objectn.exus.s3_list"> <class name="Clazz"> <id name="id" column="c_id"> <generator class="native"/> </id> <property name="name" />
<list name="stus"> <key column="c_id"></key> <!-- list是有序的,將學生對象添加到list集合的順序 --> <index column="index123" ></index> <one-to-many class="Student"/> </list>
</class>
</hibernate-mapping>
Student.hbm.xml;
<hibernate-mapping package="objectn.exus.s3_list"> <class name="Student"> <id name="id"> <generator class="native"/> </id> <property name="name" /> <!-- 多對一,name為類中的變數 ,column為產生的列名--> <many-to-one name="clz" column="c_id"></many-to-one> </class></hibernate-mapping>
②:一對一 即社會安全號碼對應每一個人
IDCard類:
public class IDCard { private String name; private Long id; private Person per;}
Person類:
public class Person { private Long id; private String name; private IDCard card;}
IDcard.hbm.xml;
<hibernate-mapping package="objectn.exus.s4_one2one"> <class name="IDCard"> <id name="id" column="c_id"> <generator class="foreign"> <param name="property">per</param> </generator> </id> <property name="name" /> <!-- constrained:添加一個主鍵約束 --> <one-to-one name="per" constrained="true"/> </class></hibernate-mapping>
person.hbm.xml;
<hibernate-mapping package="objectn.exus.s4_one2one"> <class name="Person"> <id name="id"> <generator class="native"/> </id> <property name="name" /> <one-to-one name="card"/> </class></hibernate-mapping>
測試類別:
public void testsave12() { IDCard card = new IDCard("asdasd"); Person p = new Person("張三"); card.setPer(p); p.setCard(card); Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); session.save(p);//先儲存主鍵 session.save(card); transaction.commit(); session.close();}
③:多對多,即學生和老師的關係
Student類:
public class Student { private Long id; private String name; private Set<Teacher> teac = new HashSet<>();}
Teacher類:
public class Teacher { private Long id; private String name; private Set<Student> stus = new HashSet<>();}
Student.hbm.xml;
<hibernate-mapping package="objectn.exus.s5_many2many"> <class name="Student"> <id name="id" column="s_id"> <generator class="native"></generator> </id> <property name="name" /> <!-- t_tea_stu: 設定中間表的表名 --> <set name="teac" table="t_tea_stu" > <!-- key:代表中間表的和當前對象對應的ID的列名 設定中間表的那一列關聯到當前表 --> <key column="id_stu"/> <!-- class: 設定對方的類名 column: 代表對方對象在中間表的列名 設定中間表的哪一列關聯到對方的表 --> <many-to-many class="Teacher" column="id_tea" ></many-to-many> </set> </class></hibernate-mapping>
teacher.hbm.xml;
<hibernate-mapping package="objectn.exus.s5_many2many"> <class name="Teacher"> <id name="id"> <generator class="native"/> </id> <property name="name" /> <set name="stus" table="t_tea_stu"> <key column="id_tea"></key> <many-to-many class="Student" column="id_stu"></many-to-many> </set> </class></hibernate-mapping>
hibernate中對象與對象的關係(二):list,一對一,多對多