休眠如何更改,选择,按休眠标准批量延迟加载

问题描述 投票:0回答:1

[在大多数情况下,我有很多需要紧急加载的一对多关系:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "bar")
@Fetch(FetchMode.SELECT)
@BatchSize(size = 10)

但是,在极少数情况下,我需要将其在休眠条件下更改为延迟加载(仍然是选择和批处理)。但是我不知道该怎么做。当我尝试从here-

解决方案时

criteria.setFetchMode("propertyName", FetchMode.SELECT);

它仍然渴望加载。

我的标准现在看起来像这样:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Bar.class);
criteria.add(Restrictions.eq("valid", true));
criteria.add(Restrictions.idEq(barId));
Bar result = (Bar) criteria.uniqueResult();

这里是实体,仅用于说明目的...

@Entity
@Table(name = "BAR", schema = "UD")
public class Bar {
    private List<Foo> foos;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "bar")
    @Fetch(FetchMode.SELECT)
    @BatchSize(size = 10)
    public List<Foo> getFoos() {
        return foos;
    }
}

我正在使用Hibernate 5.1.10.Final

java hibernate jpa criteria
1个回答
0
投票

我不知道是否可以按需进行获取,但是对此有一种可用的技术,您可以在自定义查询中使用构造函数来获取Bar对象:

@Query("SELECT new BAR( <add other required fields except FOOs> ) from BAR")

注意:这与LAZY加载不同。如果您晚于需要Foo,则必须再次进行数据库调用。

© www.soinside.com 2019 - 2024. All rights reserved.