2016-05-17 5 views
0

私はuserDetailsManagerを使用して新しいユーザを作成し、データベースからMyUserオブジェクトを取得しようとしています。次に例を示します。ユーザオブジェクトを作成した後で正しい方法で取得できない

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

そして、それは常にnullを返します。

DBを確認しています - すべてが整っています。 なぜですか?

+0

後にトランザクションをコミットすることによりしようとするデータを挿入するには、 'EntityManager'のあなたの' userDetailsManager'拡張子ですか?その場合は、ユーザを作成した後に 'userDetailsManager.flush();'を呼び出してみてください。 –

+0

いいえ、 'org.springframework.security.provisioning.JdbcUserDetailsManager'の' userDetailsManager' –

答えて

1

挿入を実行した直後にEntityManager#flushに電話する必要があります。レコードはDB内でフラッシュされるかもしれませんが、EMキャッシュはまだ更新されていないので、この結果が表示されます。

getResultListの代わりにgetSingleResultも使用する必要があります。

0

私はあなたの自動コミットがfalseになると思うし、あなたがセッションオブジェクトに残っているが、挿入

+0

あなたに例を挙げてもらえますか? –

関連する問題