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就是外键字段,建议自己指定名字,别全靠默认,查问题麻烦。
还有一点比较关键:cascade跟fetch,这俩配置好,能让你操作更顺手。比如设成cascade = CascadeType.ALL
,删User
的时候Profile
也跟着删,挺方便的。fetch = FetchType.LAZY
也推荐加上,加载时不会拖太多数据。
如果你有那种主键对主键的绑定需求,比如两个表用同一个主键,那可以用@PrimaryKeyJoinColumns
。不过这种场景不算多见,用的时候得小心别绕晕。
实际项目里,别看到一对一就觉得高级就上,有时候多加一个字段更简单,性能还好。要不要用,得看你场景是不是刚好卡在一对一最合适的点。
如果你想看一些具体实例或者源码示例,可以戳这些链接:
如果你刚好在搞用户-详情那类绑定,一对一是个还不错的选择;用 Hibernate 的小伙伴可以试试上面这种写法。
评论区