【发布时间】:2023-03-28 22:10:01
【问题描述】:
假设我们有这两个实体:
@Entity
class Address{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long bookId;
@ManyToOne
@OneToOne
private User user;
...
}
@Entity
class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Address> addresses;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Address principalAddress;
...
}
如您所见,我在 Address 类(@ManyToOne 和 @OneToOne)内的 User 实体顶部有两个注释。关键是,我知道这是错误的,但我不知道如何正确映射它。有设计问题吗?逻辑是用户有一个地址列表和一个且唯一的主体地址。我怎样才能正确映射它?有什么想法吗?
【问题讨论】:
-
我想您应该考虑向用户表添加额外的外键,该表将引用地址表的主要地址。想象以下情况:您有两个用户 - u1、u2。两者都有地址 - adr1,adr2。 adr1 是 u1 的主体,而 adr2 是 u2 的主体。