休眠懒惰的OneToOne渴望获取一切

时间:2018-10-01 12:58:35

标签: java performance hibernate jpa

我有一个实体,其中包含来自不同表的许多数据。 关联是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条语句。

0 个答案:

没有答案