【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不一致又会有什么后果?
大家可以试一下!
本文出自 “诺言永远依恋小柴、、、” 博客,请务必保留此出处http://1936625305.blog.51cto.com/6410597/1568892
原文:http://1936625305.blog.51cto.com/6410597/1568892