繁体   English   中英

如何将连接表映射为实体 JPA

[英]How to map Join table as Entity JPA

在我的系统中,我有UserUser可以是Manager或客户,甚至可以购买。 Manager可以有很多ClientsClient可以有很多 manager。 Manager被表示为manager_idmanagers_clients ,因此,如果User是经理,我们将他的ID存储到该列。 客户端也是如此。

我的数据库表如下所示:

users (table)
UUID  FIRST_NAME   LAST_NAME
1   Bob     Way
2   Sarah   Smith

managers_clients (table)
ID  MANAGER_ID CLIENT_ID
1   1          1
2   1          2 

现在这里的MANAGER_IDCLIENT_ID是对users.id引用

我知道可以创建第三个实体Manager并将它们与这个数据透视表联系起来......但我试图在没有它的情况下实现。

我当前的实体如下所示:

public class UserEntity {

  @Id
  @GeneratedValue(strategy = AUTO)
  private UUID uuid;

  @Column(name = "first_name")
  private String firstName;

  @Column(name = "last_name")
  private String lastName;

  @OneToMany
  private List<ManagerClientEntity> managers;

  @OneToMany
  private List<ManagerClientEntity> clients;
}

public class ManagerClientEntity {

  @Id
  @GeneratedValue(strategy = AUTO)
  private UUID uuid;

  @ManyToOne
  private UserEntity manager;

  @ManyToOne
  private UserEntity client;
}

但是,当然,它不起作用......

我是 JPA 和 Java 的新手,所以不知道应该如何映射我的实体?

看起来您的用户和客户之间存在多对多连接。 您不需要将您的桥接表作为一个单独的实体来管理......相反,您可以在ClientEntityUserEntity上使用带有相应@JoinTable@ManyToMany注释

public class UserEntity {
  @ManyToMany
  @JoinTable(name = "manager_client") // specify your bridge table here
  private List<ClientEntity> clients;
}

public class ClientEntity {
  @ManyToMany
  @JoinTable(name = "manager_client")
  private List<UserEntity> users;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM