1.多对一的单向关联
例如一个人有多个梦想,而一个梦想属于一个人(这个假设可能不是很贴合实际,理解就行),这时候我们需要一个Person类、一个Dream类;
那么我们怎么写注解呢?其实很简单,只需要在多的一方定义一个属性在该属性get方法上加@ManyToOne注解即可
Person类
package vo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Dream类
package vo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
//@Entity
public class Dream {
private int id;
private String content;
private Person person;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@ManyToOne
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
而如果在xml中写的话,需要在Dream.hbm.xml中加<many-to-one name="person" class="vo.Person" column="person_id"></many-to-one>即可
2.一对多的单向关联
例如一个班级中有多个学生,而一个学生只属于一个班级,这时候我们需要一个ClassRoom一个Student;在ClassRoom类中我们需要定义一个Student的集合,来表示包含
了多个学生,然后在其get方法上加@OneToMany @JoinColumn(name="cid")
如果没有写@JoinColumn那么hibernate默认为多对多的处理方式进行表生成,此时会生成一张中间表
而如果在xml中写的话,需要在ClassRoom.hbm.xml中加
<set name="students">
<key column="cid"></key>
<one-to-many class="vo.Student"/>
</set>
3、一对多(多对一)的双向关联
对于1-N关联,Hibernate推荐使用双向关联,而且不要让1的一段控制关联关系,而使用N的一端控制关联关系。
双向的1-N关联与N-1关联是完全相同的两种情形,两端都需要增加对关联属性的访问,N的一端增加引用到关联实体的属性,1的一端增加映射到N的属性集合。
此时如果在xml中写的话,需要在Student一端增加ClassRoom属性,并在xml中增加<many-to-one name="classroom" class="vo.ClassRoom" column="cid"></many-to-one>
如果使用注解来写的话,需要在Student中的classroom get方法上加上@ManyToOne注解,而ClassRoom中需要这么写
@OneToMany(mappedBy="classroom")
public Set<Student> getStudents() {
return students;
}
关于多对多的在下一篇介绍