我试图将元素列表与实体的@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做到这一点?
提前致谢!