如何解决如何将联接表映射为实体JPA
在我的系统中,我有User
,并且User
可以是Manager
或客户,甚至可以购买。 Manager
可以有很多Clients
,而Client
可以有很多经理。 Manager
在manager_id
中用managers_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_ID
和CLIENT_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的新手,所以不知道该如何映射实体?
解决方法
您似乎在用户和客户之间建立了多对多连接。您无需将桥表作为一个单独的实体进行管理...而是可以在@ManyToMany
和@JoinTable
上将ClientEntity
批注与相应的UserEntity
一起使用>
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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。