Hibernate实体Bean一对一映射

 

建立实体Bean之间的一对一的关联可以使用@OneToOne注解。一对一关联有以下三种方式:

1 关联的实体都共享同样的主键;

2 二是其中一个实体通过外键关联到另一个实体的主键

3 三是通过关联表来保存两个实体之间的连接关系。

下面就是一个通过共享主键来进行一对一关联映射的例子,代码如下:

@Entity

public class Person {

    @Id

    public Long getId() { return id; }

    @OneToOne(cascade = CascadeType.ALL)

    @PrimaryKeyJoinColumn

    public IDcard getIdcard() {

        return idcard;

    }

    ...

}

上面定义了一个Person类,一个人对应一个身份证类IDcard,该类的实现代码如下:

@Entity

public class IDcard {

    @Id

    public Long getId() { ...}

}

在上面例子中,通过使用注解@PrimaryKeyJoinColumn定义了一对一关联。

下面这个例子使用外键列进行实体的关联,代码如下:

@Entity

public class Customer implements Serializable {

    @OneToOne(cascade = CascadeType.ALL)

    @JoinColumn(name="passport_fk")

    public Passport getPassport() {

        ...

    }

 

@Entity

public class Passport implements Serializable {

    @OneToOne(mappedBy = "passport")

    public Customer getOwner() {

    ...

}

在上面这个例子中,Customer 通过Customer 表中名为的passport_fk 外键列和 Passport关联, @JoinColumn注解定义了联接列,该注解和@Column注解有点类似, 但是多了一个名为referencedColumnName的参数, 该参数定义了所关联目标实体中的联接列。

作者提示referencedColumnName关联到非主键列的时候,关联的目标类必须实现Serializable,还要注意的是所映射的属性对应单个列(否则映射无效)

一对一关联可能是双向的,在双向关联中, 有且仅有一端是作为主体(owner)端存在的。主体端负责维护联接列(即更新),对于不需要维护这种关系的从表则通过mappedBy属性进行声明。mappedBy的值指向主体的关联属性。 在上面这个例子中,mappedBy的值为 passport。如果在主体没有声明@JoinColumn,系统自动进行处理。 在主表中将创建联接列, 列名为主体的关联属性名+下划线+被关联端的主键列名。 在上面这个例子中是passport_id, 因为Customer中关联属性名为passport, Passport的主键是id

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值