2016-11-16 101 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;