如何查询包含至少一个搜索条件元素的@ElementCollection
?
给定相应的数据库模式
对于此实体类
@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中我可以做到
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的验证失败发布于 2022-03-18 11:47:10
谢谢克里斯。建议的查询Select c FROM Company c join c.products p WHERE p IN (:prods)
有效。谢谢你调查。
https://stackoverflow.com/questions/71509040
复制相似问题