Я пытаюсь выбрать один столбец из связанной таблицы. У меня есть таблица (элемент) со многими значениями. Я хотел бы выбрать Value.valueString.
По сути, предполагается, что запрос передает кучу значений и извлекает любые поля 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)», это правильно?
select .. from ... where value IN :collection
. Я мог бы привести пример, но мне не хочется выяснять, как сопоставляются сущности. ОП, пожалуйста, покажи, как связаны сущности (классы). - person siebz0r   schedule 11.09.2012