【问题标题】:JPA JOIN query list giving only one item instead of all itemsJPA JOIN 查询列表只给出一个项目而不是所有项目
【发布时间】:2014-05-02 10:57:36
【问题描述】:

下面的 sub 只给我数据库中的一项(Carte),而不是给我所有的 items 。我花了几个小时试图找到错误,请帮帮我

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

}  

【问题讨论】:

    标签: java sql xml jpa join


    【解决方案1】:

    这是您的查询:

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

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 2020-05-23
      相关资源
      最近更新 更多