1
我想从相关表中选择一列。我有一个包含许多值的表格(Item)。我想选择Value.valueString。Java Criteria API:从一对多关系表中选择单列
基本上,查询应该传入一堆值并拉出包含这些值的任何ValueField。在SQL可能是这个样子:
select ItemValues.valueString from ItemEntity
join StockItem on ItemEntity.stockItemId = StockItem.id
join ItemValues on ItemEntity.id = ItemValues.itemId
where StockItem.vendor = vendorId
AND (ItemValues.valueString like '%test%' OR ItemValues.valueString like '%test2%'...);
这里是我的代码:
final CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();
final CriteriaQuery<String> query = builder.createQuery(String.class);
final Root<ItemEntity> root = query.from(ItemEntity.class);
query.select(root.join("ItemValues").<String>get("ValueString"));
final List<Predicate> filters = new LinkedList<Predicate>();
filters.add(builder.equal(root.join("StockItem").get("id"), vendorNumber));
final List<Predicate> filterNamesCriteria = new LinkedList<Predicate>();
if (filenames.length > 0) {
for (String fileName : filenames) {
filterNamesCriteria.add(builder.like(root.join("ItemValues").<String>get("ValueString"), fileName));
}
filters.add(builder.or(filterNamesCriteria.toArray(new Predicate[0])));
}
query.where(filters.toArray(new Predicate[0]));
final TypedQuery<String> resolvedQuery = this.entityManager.createQuery(query);
return resolvedQuery.getResultList();
我想要的结果返回字符串(的valueString列)的列表,但它不返回任何东西。
我做错了什么?当我说“builder.createQuery(String.class)”时,是否正确?
您需要一个元组:http://stackoverflow.com/questions/3842122/complex-queries-with-jpa-criteria-builder –
但我只选择一个值。不是多重选择的元组? – dmoss18
@ a.drew.b OP不需要元组,OP可以使用IN操作实现这一点。 'select .. from ... where value IN:collection'。我可以举个例子,但我不想弄清楚这些实体是如何映射的。 OP请显示实体如何相关(类)。 – siebz0r