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

标签 java hibernate rest jpa quarkus-panache

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

相关文章:

java - 在 Spring Boot 中启动时从文件中读取数据以在 Controller 中使用

java - Rest资源文件中的两个方法具有相同的@Path但不同的mediaType输出

javascript - 为什么我在express应用程序中出现 ' cannot GET '页面?

java - DELETE 和 PUT 方法总是调用 POST

mysql - Hibernate、Null 值和 nativeSQL

java - 如何对 JWT Secured Rest API 进行负载测试

java - 有没有办法让系统关闭按钮作为 javafx 按钮?

java - 从 catch block 调用方法

java - 我应该在哪里声明和/或实现我的自定义 ResultCommand?

java - Hibernate 不承认持久的 getter/setter 属性