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;
}  

这是您的查询:

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

最新更新