java如果我真的不需要引用的数据,我应该懒洋洋地定义一个JPA manytone,还是只映射实体中的原始id?
我有一个应用程序,你可以用OIDC登录。 因此,从前端到Java/JPA后端有一个rest调用,其中包含一个令牌(标识)。 我有一个查找表,为每个外部令牌ID分配一个内部公司ID:
@Entity(name = "company_mapping")
public class CompanyMapping {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public UUID id;
public String externalId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
public Company company;
对于公司的每一组数据条目,该公司ID都是一个外键。 但我并不真的需要公司数据——或者只有在极少数特殊情况下才需要。 因此,我在想,我是否应该每次都检索公司/如何设计JPA实体,以便公司表只引用公司ID,而不是整个公司-或者,如果我进行惰性映射,这甚至都无关紧要
@Entity(name="employee")
public class Employee
@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private UUID id;
private String email;
private String firstName;
private String lastName;
[...]
@ManyToOne(fetch = FetchType.LAZY)
private Company company; // TODO maybe just use the company uuid here?
# 1 楼答案
如果你真的不需要访问公司数据,只需要访问它的ID,你可以简单地映射它的ID列。雅格尼和亲吻。在这种情况下,甚至不需要创建
Company
类另一方面,即使您将公司映射为
@ManyToOne
和LAZY
fetch类型,但前提是除了ID之外您不会访问公司数据,从生成的SQL角度来看,它们与只映射ID相同,不会生成不必要的SQL来获取公司数据