在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中的方法名称关闭查询创建?
答案 0 :(得分:6)
您可以在配置中的query-lookup-strategy
标记上指定repositories
。
<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);
}
答案 1 :(得分:2)
Spring如何处理这个问题称为查询查询策略。查询可以通过方法名称(CREATE
),手动查询(USE_DECLARED_QUERY
)或两者(CREATE_IF_NOT_FOUND
)来解析,如果未找到手动查询,则默认为方法名称。 USE_DECLARED_QUERY会为您提供所需的功能,如果未指定手动查询,则会发出警告。
Kevin回答说,这可以在xml中配置。但作为一个更现代的选项,您可以在使用queryLookupStrategy
注释中的@Enable{store}Repositories
参数在Java Config类中配置存储库时指定查找策略。
例如,要强制手动查询,您可以使用以下内容:
@EnableJpaRepositories(queryLookupStrategy=QueryLookupStrategy.Key.USE_DECLARED_QUERY)
public class MyDatabaseConfig {
...
}
此处有更多信息