2016-11-16 4 views
0

私は上記の関係について混乱しています。JPQL、Java(およびOracle DB)間の関係

のMy Oracle DBテーブル:Javaのエンティティのユーザーとマネージャーの対応

xd_Users: user_id (pk), client_id (fk), name, doj, email, dol 
xd_Managers: manager_id (pk), user_id (fk) 

は、それぞれ上記の二つのテーブルに関連しています。マネージャーとユーザーは分離しており、継承に関係なく、DBテーブルに対応するフィールドがあります。

私のアプリケーションでは、マネージャはユーザーでなければなりません。

私は管理者であるユーザーのリストを取得するために(まだ未完成のn)メソッド(PersistServiceというクラス内)を作成しています。

public static ArrayList<User> getManagersForClient(Client client) { 
    Long clientId = client.getClientId(); 
    EntityManager em = getEntityManager(); 
    String sqlQuery = "SELECT u FROM XD_USERS u, XD_MANAGERS m WHERE u.CLIENT_ID = :clientId"; 
    TypedQuery<User> query = em.createQuery(sqlQuery, User.class); 
    query = query.setParameter("clientId", clientId); 
    ArrayList<User> clientUsers = (ArrayList<User>) query.getResultList(); 
    for (User user : clientUsers) { 

    } 
    return clientUsers; 
} 

私が構築した擬似SQLクエリでした(:終わりのclient_idがちょうどJavaの変数、したがって疑似sqlです):

select * from users u join managers m on u.user_id = m.user_id where u.client_id = :client_id; 

私は、有効にこれを変換する問題を抱えていますJPQLクエリ私はこれを解決するための考え方を理解していません。特に、識別変数、単一値関係フィールド、コレクション値関係フィールドおよび永続フィールドの間の関係は非常に混乱します。私はさらにthisの投稿で混乱しています。助けてください!

+0

リンクの質問への答えが言うのと同じように:JPQLはテーブルではなくエンティティで動作します。しかし、エンティティのコードは掲載していませんが、テーブルの説明は無関係です。また、変数sqlQueryもSQLには当てはまりますが、JPQLであることがわかります。 –

答えて

0

あなたのSQLのSELECTクエリが(あなたが与えた関連テーブルの構造に応じて)JPQLにこのようなもので、正しくその後、関連企業をコード化している場合:

select u.userId,u.name,u.doj,u.email, u.dol, m.managerId 
from User u 
join u.manager m 
where u.clientId = :client_id; 
関連する問題