首页 > 解决方案 > 带有@MapsId 的单向@OneToOne 不适用于延迟加载

问题描述

我想@OneToOne使用 Hibernate 5.3.10 和 JPA 映射关联。

我知道@OneToOne在不使用字节码增强时不能延迟加载关联的父端。

在这种情况下,我只想映射客户端并使用@MapsId此处建议的关联:Best way to map onetoone

这是我在客户端的映射。父方CardEntity根本没有映射到DeviceType

public class DeviceType {

    @Id
    @Column( name = "PRODUCT_CARD_TYPE_ID" )
    private Long cardTypeId;

    ...

    @OneToOne( fetch = FetchType.LAZY )
    @MapsId
    @JoinColumn( name = "PRODUCT_CARD_TYPE_ID" )
    private CardEntity card;

    ....
}

我给它一个额外的@JoinColumn,因为 KEY 列的CardEntity名称与"PRODUCT_CARD_TYPE_ID". 请参阅更改 ID 列

对于此映射,LAZY加载不起作用。它总是执行另一个语句来获取CardEntity. 我在这里做错了什么?

标签: hibernatejpa-2.0hibernate-mapping

解决方案


看起来这是HHH-12842。所描述的方法在休眠 5.4 中完美运行。但它在 hibernate 5.3 分支中不起作用。


推荐阅读