java - 扩展 spring data 的默认语法

标签 java spring spring-data

在我当前的项目中,几乎每个实体都有一个字段 recordStatus ,它可以有 2 个值:

  • A 表示 Activity
  • D 表示已删除

在Spring数据中通常可以使用:

repository.findByLastName(lastName)

但是使用当前的数据模型,我们必须记住每个存储库调用中的 Activity 部分,例如。

repository.findByLastNameAndRecordStatus(lastName, A)

问题是:是否有任何方法可以扩展 spring 数据,使其能够识别以下方法:

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);

第二个解决方案是添加一个完全自定义的方法“旧时尚方式”,您可以创建一个新的类设置,例如: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/

关于java - 扩展 spring data 的默认语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779551/

相关文章:

elasticsearch - 通过spring-boot-starter-data-elasticsearch查询Elasticsearch时发生异常

Spring-data @Query 注解和接口(interface)

java - 如何使用 RxJava 发出错误然后发出缓存数据?

java - Android 通过后台服务启动 Activity

java - 当记录布局直到运行时才知道时,使用什么方法来解析具有固定长度记录的文件?

spring - Quartz 作业在 Tomcat 6/Ubuntu 10.04LTS 上部署时运行两次

java - 无法在 HandlerInterceptorAdapter 中 Autowiring 服务

Spring,Hibernate——批量处理大量数据,性能良好

c# - 创建循环计时器

java - Mongodb 中的聚合