Hibernate一对一关联映射

Hibernate 的一对一关联,适合两个实体之间那种一对一、绑定挺紧的关系,比如用户和用户详情、账号和绑定设备那类场景。你可以用注解搞定,基本靠@OneToOne@JoinColumn这对组合拳。

Hibernate 的一对一关联说白了就是两个表一对一绑定,一个有外键指向另一个的主键,反过来也成立。用起来也不难,像下面这样:

@Entity
public class User {
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

@OneToOne(mappedBy = "user", cascade = CascadeType.ALL) private Profile profile; }

@Entity public class Profile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

@OneToOne @JoinColumn(name = "user_id") private User user; }

你要注意这里mappedBy的用法,它指定了关系是从Profile那边来维护的;@JoinColumn就是外键字段,建议自己指定名字,别全靠默认,查问题麻烦。

还有一点比较关键:cascadefetch,这俩配置好,能让你操作更顺手。比如设成cascade = CascadeType.ALL,删User的时候Profile也跟着删,挺方便的。fetch = FetchType.LAZY也推荐加上,加载时不会拖太多数据。

如果你有那种主键对主键的绑定需求,比如两个表用同一个主键,那可以用@PrimaryKeyJoinColumns。不过这种场景不算多见,用的时候得小心别绕晕。

实际项目里,别看到一对一就觉得高级就上,有时候多加一个字段更简单,性能还好。要不要用,得看你场景是不是刚好卡在一对一最合适的点。

如果你想看一些具体实例或者源码示例,可以戳这些链接:

如果你刚好在搞用户-详情那类绑定,一对一是个还不错的选择;用 Hibernate 的小伙伴可以试试上面这种写法。

rar 文件大小:318.19KB