spring-data-jpa 如何在不加载Map实体的情况下访问Spring Data JPA中的连接列(外键)

7gyucuyw  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(181)

我有一个POST实体和一个HeadingSlugEntity。

public class PostEntity implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String postId;
    private String uid;
    private String dateCreated;
    private String dateUpdated;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "headingSlugId", referencedColumnName = "headingSlugId")
    private HeadingSlugEntity headingSlugEntity;
}

我为HeadingSlugEntity创建了一个1:1的Map。当我将post实体和headingSlugEntity保存在一起时,headingSlugId会自动填充。这样做很好。下次我获取post实体时,我需要访问headingSlugId而不获取headingSlugEntity。(此时,我不需要HeadingSlugEntity,我只需要它的ID。)我只需要获取headingSlugId。如何操作。由于此实体没有headingSlugId字段,我无法设置和获取它。如果我在post实体内添加一个名为headingSlugId的字段,我将得到Hibernate重复字段错误。如果我将

insertable = false, updatable = false)

并添加字段headingSlugId,则headingSlugId将为空。
我在这里缺少了什么基本的东西?

oyxsuwqo

oyxsuwqo1#

在这种情况下,您可以将外键Map到实体两次,一次用于实际的ORM,另一次用于获取FK,而无需实际触发新查询。

public class Answer {
   @Column(name = "headingSlugId", insertable = false, updatable = false)
   private Integer headingSlugId;

   @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
   @JoinColumn(name = "headingSlugId", referencedColumnName = "headingSlugId")
   private HeadingSlugEntity headingSlugEntity;
}

相关问题