Ich erstelle eine Anwendung mit einer REST-API mithilfe von Spring-Boot und JPA, die mit einer MySQL-Datenbank verbunden sind. Um nach Namen in der Benutzerklasse zu suchen, habe ich eine Abfragemethode implementiert: List<User> findByFirstnameLike(String name);
Unerwartetes leeres Ergebnis mithilfe der Spring-Abfrage-Methode
Diese Methode gibt nur ein Ergebnis für eine exakte Übereinstimmung zurück, was ich nicht wollte. Habe ich etwas über seine Verwendung missverstanden?
Das Repository Schnittstelle:
public interface UserRepository extends JpaRepository<User, Long> {
public List<User> findByFirstname(String name);
public List<User> findByFirstnameLike(String name);
}
Der Service bean Methode:
@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);
}
Die REST-Interface-Methode:
@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));
}
Entitätsklasse:
@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;
Also ... mit einem Benutzer in der Datenbank mit dem Namen "Adam", die Abfrage-Methode gibt eine leere Liste für eine beliebige Zeichenfolge mit Ausnahme von "Adam".
Edit 2: Nach dem Einschalten zeigen SQL drehen und ein Objekt in die Datenbank einfügen, suche ich einen Teil des Vornamens und liefere diese Ausgabe und eine leere Liste:
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 ?
Das searhing für ein genaue Übereinstimmung, die ein Array mit einem Objekt zurückgibt:
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 ?
Gibt es einen Schreibfehler, 'Vorname' vs' firstName'? –
Können Sie show sql einschalten und gegen Ihre db ausführen? – blur0224
Die Entitätsklasse wurde hinzugefügt. Denke nicht, dass es ein Rechtschreibproblem gibt. –