@OneToOne级联配置

注解讲解

@OneToOne(fetch=FetchType,cascade=CascadeType)

可选

@OneToOne描述一个一对一的关联

fetch:表示抓取策略,默认为FetchType.LAZY

cascade:表示级联操作策略

单向级联

@OneToOne 定义:一对一关系。

生活中的一对一关系,举例:人(man) 和 宠物(pet)。前提(一人只养一个宠物)

为什么这个一对一关系是单向的?如果,人养了宠物,那么我们通过“人”就能得到他所拥有的“宠物”的实体。但是,是不是通过“宠物”就能得到“人”的实体呢?!恐怕未必吧~因为在实际生活中,有很多走失的宠物,我们无法通过它们找到它们的主人。

类似于上述这种情况,或者业务关系。实体间的关系是一对一,并且,我们只需要通过一个实体得到其对应的实体,而且并不需要反向执行这个操作的时候。我们就需要使用单向一对一关系。

例子:

@Entity
@Table(name = "people")
public class People (){

     @Id  //JPA注释: 主键
     @GeneratedValue(strategy = GenerationType.AUTO)   //设置 id 为自增长
     private Long id;

     private String name;

     //由于,people 是这个一对一的关系的主控方,所以,在people表中添加了一个 pet 的外键。
     //通过这个外键来维护 people和pet的一对一关系,而不是用第三张码表。这个是通过@JoinColumn注释实现的。
     @OneToOne //JPA注释: 一对一 关系
     @JoinColumn(name="pet_fk" )// 在pepole中,添加一个外键 "pet_fk"
     private Pet pet;

     //省略 get / set  方法...
}



@Entity
@Table(name = "pet")
public class Pet (){

     @Id  
     @GeneratedValue(strategy = GenerationType.AUTO)  
     private Long id;

     private String name;

     //省略 get / set  方法...
     //因为这是一个单向的一对一关系,并且,是从 people 到 pet 的一对一关系。
     //所以,在 pet 中没有与 people 管理的 属性。也就是说,无法通过 pet 找到 people
}

参考:http://blog.sina.com.cn/s/blog_625d79410101d8st.html

双向关联

  • 主Pojo

  • 从Pojo

  • 持久化关联关系设置

源代码属性讲解

Last updated

Was this helpful?