【发布时间】:2018-12-24 19:24:08
【问题描述】:
我有一项任务需要一些“特殊”用户无需登录即可在帐户之间切换。作为起点,我有一个仅包含用户 ID 的连接表。以 PRIMARY_USER_ID 和 SECONDARY_USER_ID 的形式作为来自 USERS 表的外键。首先需要实现的是用户之间所有连接的GET。 [{"primary_username", "primary_email","secondary_username","secondary_email"}]。
我在 User 实体上创建了多对多关系,关系的双方都在 User 上。
@EqualsAndHashCode.Exclude
@ToString.Exclude
@ManyToMany(fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "CONTACTS_ONE_LOGIN",
joinColumns = { @JoinColumn(name = "PRIMARY_CONTACT")},
inverseJoinColumns = {@JoinColumn(name = "SECONDARY_CONTACT")}
)
private Set<Contact> secondaryContacts = new HashSet<>();
@EqualsAndHashCode.Exclude
@ToString.Exclude
@ManyToMany(cascade = {
CascadeType.REMOVE
},
mappedBy = "secondaryContacts")
private Set<Contact> primaryContacts = new HashSet<>();
现在的问题是,当我想获取联系人之间的所有连接时,我需要首先从连接表中获取所有信息,然后通过每个 PRIMARY_CONTACT_ID 来获取它的连接联系人。这将导致性能非常低。
我想将其更改为拥有一个 CONNECTED_USERS 实体,它在 USER 上有两个多对一关系,而不是两个 USER ID。
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PRIMARY_CONTACT_ID")
private Contact contact;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SECONDARY_CONTACT_ID")
private Contact contact;
我的问题是,这是否会增加性能,因为在我的开发数据库中我没有很多用户来正确测试它?或者有没有更好的方法来做到这一点?
【问题讨论】:
-
测量并找出答案。