将列表与Spring Data中的ElementCollection进行比较

时间:2018-01-29 13:55:51

标签: java spring-data

我试图将元素列表与实体的@ElementCollection字段进行比较,以确保它们包含完全相同的元素,但我有点麻烦。简化的代码示例可能更好地说明了问题:

@Entity
@Data
public class ExampleEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ElementCollection
    @OrderColumn
    private List<String> tokens;
}

鉴于上述实体,我希望能够获得一个查询,该查询可以接收列表并与“令牌”进行比较。找到具有完全相同标记的ExampleEntities(并且重要的是,以相同的顺序),但是下面的存储库不起作用:

@RepositoryRestResource
public interface ExampleEntityRepository extends CrudRepository<ExampleEntity, Long> {

    @Query("SELECT e FROM ExampleEntity e WHERE e.tokens = :tokens")
    public ExampleEntity findEntitiesMatchingTokens(@Param("tokens") List<String> tokens);

}

堆栈跟踪的相关部分是:

  

org.springframework.dao.InvalidDataAccessResourceUsageException:可以   不准备陈述; SQL [select exampleent0_.id as id1_2_ from   example_entity exampleent0_ cross join example_entity_tokens tokens1_   其中exampleent0_.id = tokens1_.example_entity_id和。=(?,?,?)];   嵌套异常是org.hibernate.exception.SQLGrammarException:可以   没有根据原因准备声明

     

org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误&#34; SELECT   EXAMPLEENT0_.ID AS ID1_2_ FROM EXAMPLE_ENTITY EXAMPLEENT0_ CROSS JOIN   EXAMPLE_ENTITY_TOKENS TOKENS1_在哪里   EXAMPLEENT0_.ID = TOKENS1_.EXAMPLE_ENTITY_ID AND。[*] =(?,?,?)&#34 ;;   预期&#34; NOT,EXISTS,INTERSECTS,SELECT,FROM,WITH&#34 ;; SQL语句:   从example_entity exampleent0_中选择exampleent0_.id作为id1_2_   交叉连接example_entity_tokens tokens1_其中   exampleent0_.id = tokens1_.example_entity_id和。=(?,?,?)   [42001-196]

所以看起来你不能尝试以这种方式比较列表。有没有任何巧妙的方法来使用Spring Data中的@Query做到这一点?

提前致谢!

0 个答案:

没有答案