Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法@Query查找ElementCollection中具有匹配枚举的实体_Java_Jpa_Spring Data Jpa_Spring Data Rest - Fatal编程技术网

Java 无法@Query查找ElementCollection中具有匹配枚举的实体

Java 无法@Query查找ElementCollection中具有匹配枚举的实体,java,jpa,spring-data-jpa,spring-data-rest,Java,Jpa,Spring Data Jpa,Spring Data Rest,我有一个实体,它有一个枚举列表,作为字符串存储在集合表中 enum Color { RED, GREEN, BLUE } @Entity class Product { @Id private Long id; @Column private String name; @ElementCollection @Enumerated(EnumType.STRING) @CollectionTable(name =

我有一个实体,它有一个枚举列表,作为字符串存储在集合表中

enum Color {
    RED,
    GREEN,
    BLUE
}

@Entity
class Product {

    @Id
    private Long id;

    @Column
    private String name;

    @ElementCollection
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "ProductColors", joinColumns = @JoinColumn(name = "product_id"))
    @Column(name="color")
    private List<Color> availableColors;
}
可以对这样一个简单的ElementCollection进行查询吗,或者我必须移动到一个完整的实体来存储颜色关系吗


at的答案表明可以这样做,但我看不出我做错了什么。

引用JPA规范中的JPQL BNF

in_expression ::=
{state_valued_path_expression | type_discriminator} [NOT] IN
{ ( in_item {, in_item}* ) | (subquery) | collection_valued_input_parameter }

in_item ::= literal | single_valued_input_parameter
在您的情况下,“p.availableColors”不是一个“collection\u valued\u input\u参数”(或子查询,或其他选项)。它是您实体的一个字段。因此,您尝试的不是JPQL可移植语法

然而,使用

select p from Product p where :color MEMBER OF p.availableColors
应该提供您所需要的,JPA实现可能会对enum连接表进行内部连接,在所需的特定enum成员上添加WHERE子句。

尝试
@Query(“从产品p中选择p,其中:p.availableColors的颜色成员”)
in_expression ::=
{state_valued_path_expression | type_discriminator} [NOT] IN
{ ( in_item {, in_item}* ) | (subquery) | collection_valued_input_parameter }

in_item ::= literal | single_valued_input_parameter
select p from Product p where :color MEMBER OF p.availableColors