1

#我怀疑 Product 表中的 partId 可以为 null ,所以如果 partId 为 null 我看不到产品。如果我的产品表有 11 个条目,并且 2 个条目的 partId 为 null ,我只能看到 9 个条目

 String hql = "from " + Product.class.getName() + " bs, "
                + Part.class.getName() + " dm, "
                          + Manufacturer.class.getName() + " m where "
                          + " m.id = bs.manufacturerId and dm.id = bs.partId ";
========================================

输出必须像这样 productName | 零件名称 | 制造商名称

4

1 回答 1

1

你需要做左连接而不是内连接。但这只有在您的实体关联在一起而不是包含彼此的 ID 时才有可能。

事实上,使用 HQL 是完全不可能的。

根据您的查询,您可能应该在 Product 和 Manufacturer 之间有一个 ManyToOne,在 Product 和 Part 之间有一个 ManyToOne。

此外,如果您没有连接类名并且使用正确的别名,您的查询将更具可读性:

String hql = "from Product product, Part part, Manufacturer manufacturer"
             + " where manufacturer.id = product.manufacturerId"
             + " and part.id = product.partId";

一旦关联存在,查询应该只是

String hql = "select product.name, part.name, manufacturer.name"
             + " from Product product"
             + " left join product.part part"
             + " left join product.manufacturer manufacturer";
于 2012-05-28T09:35:28.813 回答