Java标准API : Select single column from one-to-many relationship table

标签 java jpa persistence jpql criteria-api

我正在尝试从相关表中选择单个列。我有一个包含许多值的表(项目)。我想选择 Value.valueString。

基本上,查询应该传入一堆值并提取包含这些值的任何 ValueFields。 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)”时,这是正确的吗?

最佳答案

我发现了问题:

filters.add(builder.equal(root.join("StockItem").get("id"), vendorNumber));

我是根据 StockItem id 而不是 StockItem.itemNumber 加入的

我使用了两个查询来解决加入 Itemvalues map 的问题(它返回了 32,000 多个结果)

关于Java标准API : Select single column from one-to-many relationship table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360427/

相关文章:

java - 如何在 Groovy 中将 XML 转换为对象并插入到 MongoDB 集合中?

Java EE -- 初学者的配置问题

java - JPA Hibernate 两个外键指向同一个表

java - 保存后刷新并获取实体(JPA/Spring Data/Hibernate)

android - 将参数传递给 AndroidViewModel

java - 在等待 "long"时间时重用 tomcat 线程

java - JPQL:SELECT NEW 查询中的枚举文字

java - @ManyToOne、@OneToMany 删除错误

java - 我的 LinkedList 未按应有的方式保存(关于其元素顺序)

database - NHibernate 可以持久保存到平面文件而不是数据库吗?