我有一个实体,其中包含来自不同表的许多数据。 关联是OneToOne,并且都是可选的-只有一个字段不是可选的(并且是ManyToOne)。
具有懒惰的OneToOne存在问题,因此我在构建时设置了休眠字节码增强器。 这里是实体:
@Entity
public class LinkEntity {
@OneToOne(fetch = FetchType.LAZY, mappedBy = "link", cascade = CascadeType.PERSIST)
@LazyToOne(LazyToOneOption.NO_PROXY)
private FirstOptionalEntity first;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "link", cascade = CascadeType.PERSIST)
@LazyToOne(LazyToOneOption.NO_PROXY)
private SecondOptionalEntity second;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "link", cascade = CascadeType.PERSIST)
@LazyToOne(LazyToOneOption.NO_PROXY)
private ThirdOptionalEntity third;
@ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = CascadeType.PERSIST)
@JoinColumn(name = "NEEDED_ID")
private NeededEntity needed;
}
@Entity
public class FirstOptionalEntity { // Second and Third looks the same
@OneToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "LINK_ID")
private LinkEntity link;
}
现在我有以下问题: 我想加载所有LinkEntity,然后调用FirstEntity only 。 但是,每当我调用OneToOne关联的任何获取方法时,就会立即加载每个OneToOne关系。
这是正常现象还是我出了什么问题?
findAll(LinkEntity)
有关LinkEntity和NeededEntity的SQL日志行->不错
linkElement.getFirst()
第一个->不错的SQL日志行
SQL日志第二行->不太好
SQL日志第三行->不太好
在那种情况下,这是有问题的,因为我想用一个OptionalEntity左连接来加载许多LinkEntities,以减少数据库查询。
但是现在我有了一个链接选择语句,然后是可选实体的3 * n条语句。