具有@MapsId的单向@OneToOne不适用于延迟加载 [英] Unidirectional @OneToOne with @MapsId does not work with lazy loading
问题描述
我想使用Hibernate 5.3.10和JPA映射@OneToOne
关联.
I want to map a @OneToOne
association using Hibernate 5.3.10 and JPA.
我知道,当不使用字节码增强功能时,@OneToOne
关联的父端不会被延迟加载.
I know that the parent side of a @OneToOne
association cannot be loaded lazily when not using bytecode enhancements.
在这种情况下,我只想映射客户端并使用在此处建议的@MapsId
关联:
In this case, I only want to map the client side and use @MapsId
association which is suggested here: Best way to map onetoone
这是我在客户端的映射.
父方CardEntity
完全没有与DeviceType
的映射.
Here is my mapping on the Client side.
The parent side CardEntity
has no mapping to the DeviceType
at all.
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
,因为CardEntity
中的KEY列的名称与"PRODUCT_CARD_TYPE_ID"
不同.
参见更改ID列
I give it an extra @JoinColumn
because the KEY column in the CardEntity
has a different name than "PRODUCT_CARD_TYPE_ID"
.
See Change Id Column
对于此映射,LAZY
加载不起作用.它总是执行另一条语句来获取CardEntity
.我在这里做错了什么?
For this mapping, LAZY
loading does not work. It always executes another statement to fetch the CardEntity
. What I am doing wrong here?
推荐答案
它看起来像是 HHH-12842 .所描述的方法在hibernate 5.4中完全有效.但是它在休眠5.3分支中不起作用.
It looks like this is the HHH-12842. The described approach perfectly works in the hibernate 5.4. But it does not work in the hibernate 5.3 branch.
这篇关于具有@MapsId的单向@OneToOne不适用于延迟加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!