【发布时间】:2020-08-25 03:10:56
【问题描述】:
我是 Java 世界和 JPA 的新手。我对 OneToMany 关系有疑问。
所以我有两个实体:UserEntity 和 ManagerEntity。
Manager 是一个被提升的User,所以这里我们有OneToOne 关系,其中managers 表中的manager_uuid 引用users 表中的uuid。这种关系很好。
现在每个Manager 都有很多clients => UserEntity 并由managers 表映射。
问题是它一直在users 表中寻找client_uuid 而不是managers,我不知道为什么...
@Entity
@Table(name = "users")
public class UserEntity {
@Id
@GeneratedValue(strategy = AUTO)
private UUID uuid;
@OneToOne
@JoinColumn(
name = "manager_uuid",
referencedColumnName = "uuid")
private ManagerEntity managerReference;
@ManyToOne
@JoinColumn(name = "client_uuid",
referencedColumnName = "uuid")
private ManagerEntity manager;
}
@Entity
@Table(name = "managers")
public class ManagerEntity {
@Id
@GeneratedValue(strategy = AUTO)
private UUID uuid;
@OneToOne(mappedBy = "managerReference")
private UserEntity actingМanager;
@OneToMany(mappedBy = "manager")
private List<UserEntity> clients = new ArrayList<>();
}
迁移:
CREATE TABLE IF NOT EXISTS managers
(
uuid uuid DEFAULT gen_random_uuid() PRIMARY KEY,
manager_uuid uuid NOT NULL,
client_uuid uuid NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL,
FOREIGN KEY (manager_uuid) REFERENCES users (uuid),
FOREIGN KEY (client_uuid) REFERENCES users (uuid)
)
错误:
错误:列 userentity0_.client_uuid 不存在
知道我做错了什么吗?
【问题讨论】:
-
它按预期工作。 client_uuid 是需要在用户表中的东西。由于一位经理将拥有多个客户,因此您不能在经理表的单个字段中插入多个 client_uuid。但是当它反过来时,一个用户将只有一个经理。这样他们就可以轻松存储 manager_uuid。
-
@DeepakKumar 我不认为你明白...基本上,通常情况下,你会有 3 个表:
users、managers和manager_users。但是因为User和Manager相同,所以我使用了2 个表。因此,对于分配给经理的多人游戏用户,我将拥有多人游戏记录和分配日期。所以你的答案不适合我的用例。 -
根据您的上述评论,我认为您应该考虑使用多对多关系。
标签: java postgresql hibernate jpa