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

8
在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数据@Query,这时手动编写查询语句会更加可读。

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

2个回答

7

你可以在配置文件的 repositories 标签上指定 query-lookup-strategy

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

请参阅文档

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

5
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 {
    ...
}

更多信息请查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接