【问题标题】:Lazy fetch for JPA @OneToOne or @ManyToOne Two Join ColumnsJPA @OneToOne 或 @ManyToOne 两个连接列的延迟获取
【发布时间】:2023-04-05 05:13:01
【问题描述】:

我有一个Topic 实体,根据问卷版本应该对应一个Questionnaire。我需要使用惰性获取。

但是,惰性获取不起作用。在获取所有主题时,我看到 Hibernate 还会执行单独的 SQL 查询来获取每个主题的问卷。

public class Topic {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    @Access(AccessType.PROPERTY)
    private long id;

    @Column(name = "questionnaire_version")
    private String questionVer;

    @ManyToOne(optional = true, fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "id", referencedColumnName = "topic_id",
                insertable = false, updatable = false),
            @JoinColumn(name = "questionnaire_version", referencedColumnName = "version",
                insertable = false, updatable = false)
        })
    @Access(AccessType.PROPERTY)
    private Questionnaire questionnaire;

在这种情况下如何让惰性获取工作?我这里需要 OneToOne,OneToOne 和 ManyToOne 都试过了。

【问题讨论】:

  • 你解决了吗?

标签: java hibernate jpa


【解决方案1】:

家长: @OneToOne(optional = true, fetch = FetchType.LAZY, cascade = {CascadeType.ALL})

孩子: @ManyToOne(optional = true, fetch = FetchType.LAZY, cascade = {CascadeType.ALL})

在任一侧使用级联。您可能希望根据您的要求司法使用 ALL。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2014-12-14
相关资源
最近更新 更多