標籤:多對一雙向關聯映射 一對多雙向關聯映射
【Hibernate】之關於一對多,多對一雙向關聯映射
由於一對多,和多對一的雙向關聯映射基本上一樣,所以這裡就一起寫下來!
Annotations配置
@Entity@Table(name="t_group")publicclass Group { private Integer id; private String name; private Set<Person> persons=newHashSet<Person>();//set不允許重複,最適合資料庫模型 @Id @GeneratedValue public Integer getId() { returnid; } publicvoid setId(Integerid) { this.id = id; } @Column(name="t_name") public String getName() { returnname; } publicvoid setName(Stringname) { this.name = name; } @OneToMany(mappedBy="group")//意識是告訴Hibernate的關聯關係應該設在Person,多的一方// 只有OneToOne,OneToMany,ManyToMany上才有mappedBy屬性,ManyToOne不存在該屬性; public Set<Person>getPersons() { returnpersons; } publicvoidsetPersons(Set<Person> persons) { this.persons = persons; }}
@Entity@Table(name="t_person")publicclass Person { private Integer id; private String name; private Integer age; private Group group; @ManyToOne public Group getGroup() { returngroup; } publicvoid setGroup(Groupgroup) { this.group = group; } @Id @GeneratedValue public Integer getId() { returnid; } publicvoid setId(Integerid) { this.id = id; } @Column(name="p_name") public String getName() { returnname; } publicvoid setName(Stringname) { this.name = name; } @Column(name="p_age") public Integer getAge() { returnage; } publicvoid setAge(Integerage) { this.age = age; }}
XML配置
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="csg.hibernate.entity"> <class name="Group" table="t_group"> <id name="id"> <column name="id"/> <generator class="native" /> </id> <property name="name" /> <set name="persons"> <key column="groupId"/> <one-to-many class="csg.hibernate.entity.Person"/> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="csg.hibernate.entity"> <class name="Person" table="t_person"> <id name="id"> <column name="id"/> <generator class="native" /> </id> <property name="name" /> <property name="age" /> <many-to-one name="group" column="groupId"/> </class></hibernate-mapping>
由上大家都可以得出疑問?
為什麼雙向關聯在Group中key需要指定column而在Person中也需要指定column呢?
如果其中一個不指定會有什麼後果?
如果指定的column不一致又會有什麼後果?
大家可以試一下!
Hibernate之關於一對多,多對一雙向關聯映射