【发布时间】:2019-10-17 17:52:00
【问题描述】:
我正在使用带有 Hibernate 的 Spring Boot 2,并且我有一个名为 ItemCarga 的实体:
@ManyToMany(cascade = { CascadeType.DETACH }, fetch = FetchType.LAZY)
@JoinTable(name = "rel_transp_carga", joinColumns = { @JoinColumn(name = "fk_item_carga") }, inverseJoinColumns = { @JoinColumn(name = "fk_transportadora") })
@LazyCollection(LazyCollectionOption.TRUE)
private Set<Transportadora> transportadoras = new HashSet<Transportadora>();
Whey 在我的存储库中使用该实体进行查询,如下所示:
@Query("select e from ItemCarga e where e.cnpjCeramica = :cnpjCeramica and (e.dataInserido between :inicio and :fim) ")
List<ItemCarga> listarProdutosPorPeriodo(
@Param("cnpjCeramica") String cnpjCeramica,
@Param("inicio") Date dataInicial,
@Param("fim") Date dataFinal,
Sort sort);
结果是一组带有transportadoras 属性的ItemCarga 实体及其所有项目。
它不应该是 null 或空吗?
由于我没有在我的选择中提及该属性,因此不应该被忽略吗?
【问题讨论】:
-
你怎么知道所有的
transportadoras都被提取了?基本上,当您使用调试器查看集合时,它会懒惰地获取对象,如果您打印内容,也是如此。所以基本上当你开始看它时,集合就会开始填满。 -
好点,我怎么知道它不是?我的意思是,如果我不做任何事情来获取,如何确认没有被获取?
-
如果您查看集合,它将被提取,这就是懒惰的全部意义所在。懒惰意味着在需要时获取。不要看,不要尝试使用
size()等。
标签: java spring set spring-data jpql