hibernate中实体关联的注解写法(一对多,多对一)

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;
 }

关于多对多的在下一篇介绍

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值