【问题标题】:JPA OneToOne and ManyToOne relationship with same entityJPA OneToOne 和 ManyToOne 与同一实体的关系
【发布时间】:2020-08-25 03:10:56
【问题描述】:

我是 Java 世界和 JPA 的新手。我对 OneToMany 关系有疑问。

所以我有两个实体:UserEntityManagerEntity

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 个表:usersmanagersmanager_users。但是因为UserManager 相同,所以我使用了2 个表。因此,对于分配给经理的多人游戏用户,我将拥有多人游戏记录和分配日期。所以你的答案不适合我的用例。
  • 根据您的上述评论,我认为您应该考虑使用多对多关系。

标签: java postgresql hibernate jpa


【解决方案1】:

它按预期工作。 client_uuid 是需要在用户表中的东西。由于一位经理将拥有多个客户,因此您不能在经理表的单个字段中插入多个 client_uuid。但是当它反过来时,一个用户将只有一个经理。这样他们就可以轻松存储 manager_uuid。

您可以尝试使您的代码如下所示:

CREATE TABLE IF NOT EXISTS managers
(
    uuid            uuid DEFAULT gen_random_uuid() PRIMARY KEY,
    manager_uuid    uuid NOT NULL,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL,
    FOREIGN KEY (manager_uuid) REFERENCES users (uuid)
)

CREATE TABLE IF NOT EXISTS users 
(
    uuid            uuid DEFAULT gen_random_uuid() PRIMARY KEY,
    client_uuid     uuid NOT NULL,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL,
    FOREIGN KEY (client_uuid) REFERENCES managers(uuid)
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2021-05-22
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多