【发布时间】:2017-04-07 07:23:37
【问题描述】:
这是一个引用子组的简单产品实体:
public class Product implements Comparable<Product> {
...
@ManyToOne(optional=false, fetch=FetchType.LAZY)
@NotNull
private ProductSubGroup productSubGroup;
...
}
我在另一个实体中有一张包含Product 的地图:
public class FinishedProduct {
...
@NotNull
@ManyToOne
private Product product;
@ElementCollection(fetch=FetchType.LAZY)
@MapKeyJoinColumn
@Column(name="amount")
@Sort(type=SortType.NATURAL)
@Fetch(FetchMode.SUBSELECT)
private SortedMap<Product, Double> byproducts = new TreeMap<>();
...
}
我可以使用以下代码加载地图:
Root<FinishedProduct> root = q.from(FinishedProduct.class);
root.fetch("product", JoinType.LEFT);
root.fetch("byproducts", JoinType.LEFT);
这可行,但我需要存储在地图中的副产品的 productSubGroup 而不生成 n+1 选择。我怎样才能拿到它们?只需将 fetch 添加到最后就会导致异常:
root.fetch("byproducts", JoinType.LEFT).fetch("productSubGroup", JoinType.LEFT);
org.springframework.dao.InvalidDataAccessApiUsageException:
Collection of values [null] cannot be source of a fetch
还试图与MapJoin 鬼混,同样的例外:
MapJoin<FinishedProduct,Product,Double> map = root.joinMap("byproducts", JoinType.LEFT);
map.fetch("productSubGroup", JoinType.LEFT);
我想我需要以某种方式引用地图键,但不知道如何。
【问题讨论】:
标签: java hibernate jpa criteria-api