gpt4 book ai didi

java - JPA JOIN 查询列表仅给出一项而不是所有项

转载 作者:行者123 更新时间:2023-12-02 05:52:26 30 4
gpt4 key购买 nike

以下子项仅从数据库中向我提供一项(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;
------------------------------^

关于java - JPA JOIN 查询列表仅给出一项而不是所有项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426477/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com