JPA JOIN查询列表仅提供一个项目而不是所有项目

时间:2014-05-02 10:57:36

标签: java sql xml jpa join

以下子项只给我一个项目(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;

}  

1 个答案:

答案 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;
------------------------------^