2016-11-16 103 views
0

我對上述關係感到困惑。JPQL,Java(和Oracle DB)之間的關係

我的Oracle數據庫表:

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

相應的Java實體用戶和經理分別與上述兩個表。管理器和用戶是分開的,通過繼承不相關,並且具有對應於數據庫表的字段。

在我的應用程序中,經理必須是用戶。

我正在寫一個(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;