以下子项只给我一个项目(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;
}
答案 0 :(得分:2)
以下是您的查询:
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;
------------------------------^