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的帖子。请帮忙!
正如答案的链接的问题说: :JPQL处理实体,而不是表格。然而,你还没有发布你的实体代码,而是你的表的描述,这是无关紧要的。你也可以命名你的变量'sqlQuery',尽管你知道它不是SQL,但是JPQL。 –