2016-05-17 12 views
0

Ich benutze UserDetailsManager, um neue Benutzer und richtige Weise zu erstellen, versuchen MyUser-Objekt aus der Datenbank zu erhalten. Hier ein Beispiel:Benutzerobjekt kann nicht richtig nach der Erstellung abgerufen werden

User user = new User(username, passwordHash, Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); 
userDetailsManager.createUser(user); 

MyUser current = users.findByUsername(user.getUsername()); 

public MyUser findByUsername(String username) { 
    TypedQuery<MyUser> query = entityManager.createQuery(
      "select u from User u where u.username = :username", User.class); 
    query.setParameter("username", username); 
    return query.getResultList().get(0); 
} 

Und es gibt immer null.

DB überprüfen - alles ist vorhanden. Warum?

+0

Ist Ihr 'eine Erweiterung' EntityManager' userDetailsManager'? Wenn ja, versuchen Sie, 'userDetailsManager.flush();' aufzurufen, nachdem Sie Ihren Benutzer erstellt haben. –

+0

Nein, 'userDetailsManager' von' org.springframework.security.provisioning.JdbcUserDetailsManager' –

Antwort

1

Sie sollten EntityManager#flush direkt nach der Ausführung der Einfügung aufrufen. Der Datensatz wurde möglicherweise in der Datenbank gelöscht, aber der EM-Cache wurde wahrscheinlich noch nicht aktualisiert, daher erhalten Sie dieses Ergebnis.

Sie sollten auch getSingleResult anstelle von getResultList verwenden.

0

Ich denke, Ihr autocommit falsch sein und Sie Daten einfügen, die von commiting Transaktion nach dem Einsetzen bleibt in-Session-Objekt versuchen

+0

Können Sie bitte ein Beispiel geben? –

Verwandte Themen