2017-02-28 12 views
1

私は、ユーザークラス、学生クラス、および教師クラスを持っていたいと思います。生徒と教師のクラスがユーザーを拡張しています。 HibernateとSpringセキュリティでこれを行う最善の方法は何ですか?現時点では、私は予想されるフィールドとユーザーを持っています:Spring - 休止状態と春のセキュリティでクラスを拡張する

@OneToOne(cascade=CascadeType.ALL) 
@JoinTable(name="user_roles", 
      joinColumns = {@JoinColumn(name="user_id", referencedColumnName="id")}, 
      inverseJoinColumns = {@JoinColumn(name="role_id", referencedColumnName="id")}) 
      private Role role; 

春のセキュリティに役立ちます。すべてのものは、ユーザーを使用するだけでうまく動作しますが、今はユーザークラスを拡張しようとしています。開始方法はわかりません。どのように休止状態は、拡張クラスを扱うのですか?大きなユーザーリポジトリに学生や教師をいれてもらえますか?春のセキュリティはどのようにこれで動作しますか?

おかげ

答えて

0

私が正しくあなたの質問を理解していれば、あなたはあなたのユーザー、教師、学生のインスタンスのために働くだろう春のセキュリティのUserDetailsS​​ervice実装を持っていると思います。

これを実現するには、Hibernate継承サポートとpolymorthicクエリを使用してユーザー情報を取得できます。そうでないとしてスーパーマップさhttp://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#entity-inheritance

は適していません。

Hibernateは継承(スーパーマッピングされシングル表入社表、クラスあたり表)を表すためにいくつかの戦略を持っています多相クエリをサポートします。他の3つは行います。あなたは

@Override 
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
    User user = (User) getHibernateTemplate().execute(new HibernateCallback() { 
     public Object doInHibernate(Session session) 
       throws HibernateException, SQLException { 
      Query query = session.createQuery("select u from User u where login = ?"); 
      query.setParameter(0, username); 
      return query.uniqueResult(); 
     } 
    }); 
    if (user == null) { 
     throw new UsernameNotFoundException("Unauthorized"); 
    } 

    // ... usual password check follows... 

    // ... create UserDetails as usual 
} 
ような何かを行うことができ、あなたのUserDetailsS​​ervice実装インサイド

関連する問題