在我当前的项目中,几乎每个实体都有一个字段recordStatus
,该字段可以具有2个值:A
有效D
代表已删除
在春季数据中,通常可以使用:
repository.findByLastName(lastName)
但是使用当前数据模型,我们必须记住每个存储库调用中的活动部件,例如。
repository.findByLastNameAndRecordStatus(lastName, A)
问题是:是否有任何方式可以扩展弹簧数据,使其能够识别以下方法:
repository.findActiveByLastName(lastName)
并附加
recordStatus = 'A'
自动吗?
最佳答案
Spring Data JPA为您提供了2个附加选项,用于处理其DSL默认情况下无法处理的情况。
第一个解决方案是带有@Query批注的自定义查询
@Query("select s from MyTable s where s.recordStatus like 'A%'")
public MyObect findActiveByLastName(String lastName);
第二种解决方案是添加一个完全自定义的方法“ Old Fashion Way”,您可以创建一个新的类设置,例如:MyRepositoryImpl Impl非常重要,因为Spring知道如何找到您的新方法(注意:您可以避免这种情况,但是您将需要手动链接文档可以帮助您的内容)
//Implementation
public class MyRepositoryImpl implements MyCustomMethodInterface {
@PersistenceContext
EntityManager em;
public Object myCustomJPAMethod() {
//TODO custom JPA work similar to this
String myQuery = "TODO";
return em.createQuery(myQuery).execute();
}
}
//Interface
public interface MyCustomMethodInterface {
public Object myCustomJPAMethod();
}
//For clarity update your JPA repository as well so people see your custom work
public interface MySuperEpicRepository extends JPARepository<Object, String>, MyCustomMethodInterface {
}
这些只是一些快速示例,如果您想对其进行更多自定义,请随时阅读其Spring Data JPA文档。
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/
最后只是一个简短的说明。从技术上讲,这不是Spring Data JPA的内置功能,但您也可以使用谓词。因为我对这种方法不太熟悉,所以将您链接到该博客。
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/