下面的子程序只从数据库中给我一个项目(Carte),而不是给我所有的项目。我花了几个小时试图找到错误,请帮助我的家伙
@Path("userid/{clientid}")
@Produces({"application/xml", "application/json"})
public ArrayList<Carte> findUserid(@PathParam("clientid") Integer clientId) {
Utilisateur u1 = new Utilisateur();
u1.setId(clientId);
ArrayList<Carte > arraycarte= new ArrayList<Carte >();
Query query1=em.createQuery("select ca FROM Carte ca left join Compte c on c=ca.compteid left join Utilisateur u on u= c.clientid where u.id=:clientid");
arraycarte.addAll(query1.setParameter("clientid", u1.getId()).getResultList());
return arraycarte;
}
这是您的查询:
SELECT ca
FROM Carte ca LEFT JOIN
Compte c
ON c = ca.compteid LEFT JOIN
Utilisateur u
ON u = c.clientid
WHERE u.id = :clientid;
您的where
子句正在撤消LEFT OUTER JOIN
,因为当用户不匹配时结果是NULL
。您可以通过将其移动到ON
子句来修复此问题:
SELECT ca
FROM Carte ca LEFT JOIN
Compte c
ON c = ca.compteid LEFT JOIN
Utilisateur u
ON u.id = c.clientid AND u = :clientid;
你说你的查询工作,但似乎奇怪的是,你是指表名作为列名。我想这是打字错误造成的。换句话说,我希望出现这样的查询:
SELECT ca.*
FROM Carte ca LEFT
-----------^
Compte c
ON c.compte_id = ca.compteid
----------------------^ LEFT JOIN
Utilisateur u
ON u.id = c.clientid AND u.id = :clientid;
------------------------------^