Spring Data JPA - where 子句中的许多列

Spring Data JPA - Many columns in where clause

我需要确定一个实体是否已经被持久化。不幸的是,我没有 id,但如果实体的其他六个字段的值与持久化实体匹配,我可以确定该实体已经持久化。我正在使用 Spring JPA 存储库并且知道我可以执行以下操作:

Test findByField1AndField2And...(String field1, String field2,...)

有没有办法做类似的事情:

 @Query("SELECT t "
           + "FROM Test t "
           + "WHERE "
           + "t.field1 = :testWithSomeFieldsPopulated.field1 and "
           + "t.field2 = :testWithSomeFieldsPopulated.field2 and ..." ) 
Test findByTest(@Param("testWithSomeFieldsPopulated") Test testWithSomeFieldsPopulated)

如果您使用的是 Spring Data JPA 1.7.0 或更高版本,则可以通过 using SpEL in your @Query definition 完成此操作。所以像:

@Query("SELECT t "
           + "FROM Test t "
           + "WHERE "
           + "t.field1 = :#{#testWithSomeFieldsPopulated.field1} and "
           + "t.field2 = :#{#testWithSomeFieldsPopulated.field2} and ..." ) 
Test findByTest(@Param("testWithSomeFieldsPopulated") Test testWithSomeFieldsPopulated)