有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果你真的不需要访问公司数据,只需要访问它的ID,你可以简单地映射它的ID列。雅格尼和亲吻。在这种情况下,甚至不需要创建Company

    另一方面,即使您将公司映射为@ManyToOneLAZYfetch类型,但前提是除了ID之外您不会访问公司数据,从生成的SQL角度来看,它们与只映射ID相同,不会生成不必要的SQL来获取公司数据