gpt4 book ai didi

java - 我是否应该延迟定义 JPA ManyToOne,或者如果我确实不需要引用的数据,则只需将原始 id 映射到我的实体中?

转载 作者:行者123 更新时间:2023-12-01 16:24:24 28 4
gpt4 key购买 nike

我有一个使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com