2017-08-13 25 views
0

データベース:enter image description hereマルチテーブルから選択するにはどうすればいいですか?

同じMonhoc(それはmaMH = MH1を持っています)を持っているリストのユーザーを取得したいと思います。 マイコード:

private final SessionFactory sf = HibernateUtil.getSessionFactory(); 
Public List<User> listUserMonHoc() { 
    try { 
     sf.getCurrentSession().beginTransaction(); 
     Query query = sf.getCurrentSession().createSQLQuery("select a.username, a.name from Monhoc b join b.User a where b.mamh = :id"); 
     query.setString("id", "MH1"); 
     List<User> list = query.list(); 
     sf.getCurrentSession().getTransaction().commit(); 

     return list; 
    } catch (Exception e) { 
     System.out.println("sai"); 
     System.out.println(e.toString()); 
     //return null; 
     e.printStackTrace(); 
     return null; 
    } 
} 

エラーメッセージ:エラー:テーブル 'b.user' は存在しません。 ありがとうございました!

+0

現在のコードにはどのような問題がありますか? – Oleg

+0

例外メッセージ:org.hibernate.exception.SQLGrammarException:ResultSetを抽出できませんでした –

+0

質問に関連するスタックトレースを追加してください。 – Oleg

答えて

0

私はあなたのクエリに問題があることがわかりました。最初に、3番目のテーブルに参加し、monhocテーブルからIDで検索する必要があります。 第二には、ここに

Query query = sf.getCurrentSession().createSQLQuery("select a.username, a.name from Monhoc b join b.User a where b.mamh = :id"); 

ユーザーにb.Userを変更しなければならない問題がある、原因Bは、あなたのMonhocテーブルのalliasです。 MySQLでネイティブクエリは次のようなものになりますように :私は内部結合使用しています

SELECT u.username, u.name 
FROM user AS u 
INNER JOIN user_monhoc AS um 
ON u.username = um.user_id 
INNER JOIN monhoc AS m 
ON um.mh_id = m.mamh 
WHERE .... 

を(それはあなたのニーズに異なるdepentsをすることができます)。

関連する問題