hibernate中实体关联的注解写法(一对多,多对一)
来源:互联网 发布:淘宝网小衫女 编辑:程序博客网 时间:2024/06/05 20:11
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;
}
关于多对多的在下一篇介绍
- hibernate中实体关联的注解写法(一对多,多对一)
- hibernate中实体关联的注解写法(多对多)
- hibernate中实体关联的注解写法
- hibernate中实体关联的注解写法(组件映射)
- hibernate中一对多(多对一)双向关联
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接)
- hibernate关联关系注解(一对多、多对一、一对一)
- hibernate中多对一和一对多关联入门
- hibernate一对多,多对一关联
- Hibernate中用注解配置一对多双向关联和多对一单向关联
- Hibernate中用注解配置一对多双向关联和多对一单向关联
- Hibernate一对多、多对一关联关系的使用
- hibernate一对多 多对一 的 双向关联
- hibernate一对多,多对一的关联关…
- hibernate一对多,多对一的关联关…
- Hibernate关联关系映射(一对多/多对一)
- hibernate 关联映射 双向多对一(一对多)
- 【Hibernate框架】关联映射(一对多,多对一)
- Apache struts 1.2.9 html taglib reference
- android Intents和Intent Filters - 开发文档翻译 - 1
- Linux 2.6内核的设备模型
- 常用的C变量的定义方式
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- hibernate中实体关联的注解写法(一对多,多对一)
- ZendFramework官方提供的性能优化没有实际意义
- 第二次打豆豆
- windows xp下配置JDK环境变量(附:第一个例子程序,命令行下和eclipse下)
- LigerUi中Grid控件中的日期列的日期转换技巧(示例源代码)
- VC中MessageBox与AfxMessageBox用法与区别
- boost dynamic_bitset
- eclipse中安装插件方式(links方式)
- 数组