Java Hibernate 5.2为延迟加载的集合中的每个项打开新会话

Java Hibernate 5.2为延迟加载的集合中的每个项打开新会话,java,hibernate,session,jpa,java-8,Java,Hibernate,Session,Jpa,Java 8,我在Hibernate中有两个类之间的一对多双向映射,如下所示 @OneToMany(mappedBy="version") private List<Product> products = new ArrayList<>(); 现在我正在执行以下代码 List<Product> products = version.getProducts(); // some lines below int count = products.size(); // li

我在Hibernate中有两个类之间的一对多双向映射,如下所示

@OneToMany(mappedBy="version")
private List<Product> products = new ArrayList<>();
现在我正在执行以下代码

List<Product> products = version.getProducts();

// some lines below
int count = products.size();

// line 999
int num = products.stream().filter(x -> x::isValid).count();
List products=version.getProducts();
//下面几行
int count=products.size();
//第999行
int num=products.stream().filter(x->x::isValid.count();
现在,当从products集合中检索到流时,我可以看到hibernate会打开单独的会话,以便在进行筛选操作时从集合中加载每个项目。如何配置以在单个会话中获取它们

这是我的hibernate配置

<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.enable_lazy_load_no_trans">true</property>
<property name="hibernate.jdbc.batch_size">30</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
更新
真的
30
真的
真的

我在Hibernate 5.2.5中使用JDK 8

你可以使用这个@OneToMany(fetch=FetchType.EAGER)我不能使用EAGER加载,因为很多地方都使用产品列表,所以它只会在其他地方增加不必要的开销。试试@fetch(FetchMode.SUBSELECT)你可以使用这个@OneToMany(fetch=FetchType.LAZY)我不想使用可能具有全局效果的方法(例如使用渴望加载)
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.enable_lazy_load_no_trans">true</property>
<property name="hibernate.jdbc.batch_size">30</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>