【发布时间】:2020-06-21 03:33:49
【问题描述】:
我想使用 Hibernate 5.3.10 和 JPA 映射 @OneToOne 关联。
我知道在不使用字节码增强功能时,@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,因为CardEntity 中的KEY 列的名称与"PRODUCT_CARD_TYPE_ID" 不同。
见Change Id Column
对于这个映射,LAZY 加载不起作用。它总是执行另一个语句来获取CardEntity。我在这里做错了什么?
【问题讨论】:
-
I give it an extra @JoinColumn because the KEY column in the CardEntity has a different name than "PRODUCT_CARD_TYPE_ID"- 我不清楚。@JoinColumn中的名称指定DeviceType表中的外键列名称。要指定此外键列引用的列的名称,您应该使用referencedColumnName属性。您能否分享您的 DeviceType 和 CardEntity 表的 ddl sql 以使其清楚。 -
对不起,我认为我表达自己错了。当我不使用@JoinCOlumn 注释时,休眠使用“card_id_product_card_type_id”作为DeviceType 主键的列名。它将在 id 列前加上 card。这是修复它的方法vladmihalcea.com/…
标签: hibernate jpa-2.0 hibernate-mapping