【发布时间】:2016-06-03 12:32:14
【问题描述】:
我正在使用连接到 MySQL 数据库的 Spring Boot 和 JPA 构建一个带有 REST API 的应用程序。为了在 User 类中搜索名称,我实现了一个查询方法:List< User > findByFirstnameLike( String name );
这个方法只返回一个完全匹配的结果,这不是我想要的。我对它的使用有误解吗?
仓库界面:
public interface UserRepository extends JpaRepository<User, Long> {
public List< User > findByFirstname( String name );
public List< User > findByFirstnameLike( String name );
}
服务bean方法:
@Override
public List<User> findByFirstNameLike(String name) {
logger.info( "searching for first name: {}", name);
List< User > ret = userRepo.findByFirstnameLike(name);
if( null == ret ){
logger.info("No list returned from search");
}
else{
logger.info( "List size = {}", ret.size() );
}
return( ret );
}
REST接口方法:
@RequestMapping(
value="/{firstName}",
method=RequestMethod.GET,
produces=MediaType.APPLICATION_JSON_VALUE )
public ResponseEntity< List< User > > SearchForUserByFirstName( @PathVariable( "firstName" ) String firstName ){
return( new ResponseEntity< List< User > >( userService.findByFirstNameLike( firstName ), HttpStatus.OK) );
}
实体类:
@Entity
public class User {
public enum Department {
BS, BA, BT, BD, UX, SALES
}
@Id
@GeneratedValue
private Long id;
private String firstname;
private String lastname;
private String email;
private String phone;
private Department department;
所以...如果数据库中有一个名为“Adam”的用户,查询方法会为除“Adam”之外的任何字符串返回一个空列表。
编辑 2: 打开 show SQL 并将对象插入数据库后,我搜索名字的一部分并产生此输出和一个空列表:
searching for first name: dam <-- This is the log print
Hibernate: select user0_.id as id1_6_, user0_.department as
departme2_6_, user0_.email as email3_6_, user0_.firstname as
firstnam4_6_, user0_.lastname as lastname5_6_, user0_.phone as
phone6_6_ from user user0_ where user0_.firstname like ?
搜索返回一个包含一个对象的数组的精确匹配:
searching for first name: Adam
Hibernate: select user0_.id as id1_6_, user0_.department as
departme2_6_, user0_.email as email3_6_, user0_.firstname as
firstnam4_6_, user0_.lastname as lastname5_6_, user0_.phone as
phone6_6_ from user user0_ where user0_.firstname like ?
【问题讨论】:
-
是否有拼写错误,
firstnamevsfirstName? -
你能打开 show sql 并对你的数据库执行它吗?
-
添加了实体类。不要认为有拼写问题。
-
@blur0224:我添加了 SQL 输出。
-
如果你想返回 Adam,通常你会使用 like '%dam'。或“Ada%”。文档是否指定在使用 like 时必须放入 %% 通配符?
标签: java spring spring-data-jpa jpql