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

你可能感兴趣的:(bean,Hibernate)