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)
我需要确定一个实体是否已经被持久化。不幸的是,我没有 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)