0

我有一个您使用 OIDC 登录的应用程序。所以有一个从前端到带有令牌(身份)的 Java / JPA 后端的休息调用。我有一个查找表,它为每个外部令牌 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?
4

1 回答 1

0

如果您确实不需要访问公司数据而只需要访问其 ID ,则可以简单地映射其 ID 列。YAGNI 和 KISS。Company在这种情况下,您甚至不需要创建类。

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

于 2020-06-03T19:38:52.623 回答