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 では明らかに不可能です。

クエリを考えると、製品と製造元の間に ManyToOne があり、製品と部品の間に 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 に答える