【问题标题】:How to turn off Query creation from method names in Spring JPA?如何在 Spring JPA 中关闭从方法名称创建查询?
【发布时间】:2014-01-14 01:13:45
【问题描述】:

在 Spring Data 中是否可以从方法名称中关闭查询生成?

给定界面

public interface UserRepository extends Repository<User, Long> {

  List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

我希望 spring security 产生一个错误,指出从方法名称生成查询已被关闭,请像这样使用显式 @Query 注释。

public interface UserRepository extends Repository<User, Long> {

  @Query("select u from User u where u.emailAddress = ?1 and u.lastname = ?2")
  List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
}

我想关闭自动查询生成,因为我认为阅读查询并了解正在发生的事情比阅读方法名称并转换为 Spring 数据将生成的查询更容易,同样开启一个有很多开发人员的大型团队,有些人可能还不熟悉 Spring Data @Query 更具可读性?

如何在 Spring JPA 中关闭从方法名创建查询?

【问题讨论】:

    标签: java spring spring-data spring-data-jpa


    【解决方案1】:

    您可以在配置中的repositories标签上指定query-lookup-strategy

    <repositories query-lookup-strategy="use-declared-query"/>
    

    documentation

    User.java

    @Entity
    @NamedQuery(name="User.findByEmailAddressAndLastName",
        query="select u from User u where u.emailAddress = ?1 and u.lastname = ?2")
    public User{
    
    
    }
    

    UserRepository.java

    public interface UserRepository extends Repository<User, Long> {
    
      List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
    }
    

    【讨论】:

      【解决方案2】:

      Spring 处理这种情况的方式称为查询查找策略。查询可以通过方法名称 (CREATE)、手动查询 (USE_DECLARED_QUERY) 或两者 (CREATE_IF_NOT_FOUND) 来解析,如果未找到手动查询,则默认为方法名称。 USE_DECLARED_QUERY 将为您提供所需的功能,如果未指定手动查询,则会向您发出警告。

      正如 Kevin 所回答的,这可以在 xml 中进行配置。但作为更现代的选择,您可以在 Java Config 类中配置存储库时指定查找策略,并在 @Enable{store}Repositories 注释中使用 queryLookupStrategy 参数。

      例如,要强制手动查询,您可以使用以下命令:

      @EnableJpaRepositories(queryLookupStrategy=QueryLookupStrategy.Key.USE_DECLARED_QUERY)
      public class MyDatabaseConfig {
          ...
      }
      

      更多信息在这里

      【讨论】:

        猜你喜欢
        • 2019-08-26
        • 1970-01-01
        • 2021-09-18
        • 2015-12-11
        • 2017-04-13
        • 2019-06-10
        • 2015-07-13
        • 2022-07-15
        • 1970-01-01
        相关资源
        最近更新 更多