我有一个使用 OIDC 登录的应用程序。 因此,有一个从前端到 Java/JPA 后端的带有 token (身份)的剩余调用。 我有一个查找表,为每个外部 token 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?
最佳答案
如果您确实不需要访问公司数据而只需要访问其 ID ,则可以简单地映射其 ID 列。亚格尼和吻。在这种情况下,您甚至不需要创建 Company
类。
另一方面,即使您将公司映射为 @ManyToOne
并使用 LAZY
获取类型,前提是您不会访问除 ID 之外的公司数据,从生成的SQL来看,和只是映射ID是一样的,不会生成不必要的SQL来获取公司数据。
关于java - 我是否应该延迟定义 JPA ManyToOne,或者如果我确实不需要引用的数据,则只需将原始 id 映射到我的实体中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62180128/