首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用List查询JPA ElementCollection

用List查询JPA ElementCollection
EN

Stack Overflow用户
提问于 2022-03-17 08:18:58
回答 1查看 574关注 0票数 2

如何查询包含至少一个搜索条件元素的@ElementCollection

给定相应的数据库模式

对于此实体类

代码语言:javascript
运行
复制
@Entity
@Table(name = "companies")
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(nullable = false)
    private String name;

    @ElementCollection
    @CollectionTable(
        name="companies_products",
        joinColumns = @JoinColumn(name="company_id")
    )
    @Column(name="product")
    private List<String> products = new ArrayList<>();

    // ... getters/setters
}

我想查询有产品清单的公司的数据库。在SQL中我可以做到

代码语言:javascript
运行
复制
SELECT DISTINCT
    c.*
    FROM companies c
    LEFT JOIN companies_products cp ON c.id = cp.company_id
    WHERE
        cp.product IN ('food', 'electronics', 'books')

等效的HQL/JPQL查询是什么样子的?

我找到了Hibernate的集合相关表达式限定路径表达式,但是我无法创建一个工作查询。

  • FROM Company c WHERE c.products IN (:prods)使用List.of("food", "electronics", "books")作为命名参数 org.springframework.dao.InvalidDataAccessApiUsageException:参数值电话与预期类型java.util.Collection (n/a)不匹配;嵌套例外是java.lang.IllegalArgumentException:参数值食物与预期类型java.util.Collection (n/a)不匹配
  • FROM Company c WHERE value(c.products) IN (:prods) 无法为公共抽象com.example.demo.CompanyRepository.findWithProducts(java.util.List)!创建查询原因:方法公共抽象com.example.demo.CompanyRepository.findWithProducts(java.util.List)!;嵌套异常的查询验证失败是java.lang.IllegalArgumentException:方法公共抽象java.util.List java.lang.IllegalArgumentException的验证失败
  • FROM Company c WHERE elements(c.products) IN (:prods) 无法为公共抽象com.example.demo.CompanyRepository.findWithProducts(java.util.List)!创建查询原因:方法公共抽象com.example.demo.CompanyRepository.findWithProducts(java.util.List)!;嵌套异常的查询验证失败是java.lang.IllegalArgumentException:方法公共抽象java.util.List java.lang.IllegalArgumentException的验证失败
EN

回答 1

Stack Overflow用户

发布于 2022-03-18 11:47:10

谢谢克里斯。建议的查询Select c FROM Company c join c.products p WHERE p IN (:prods)有效。谢谢你调查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71509040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档