2012-05-28 37 views
0

#我懷疑是ProductItem中的partId可以爲null,所以如果partId爲null,我無法看到產品。如果我的產品表中有11項和2項已PARTID爲空,蔭能看到的只有9項格式化hql查詢

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 "; 
======================================== 

的輸出中必須是這樣 產品名稱| PartName |製造商名稱

回答

1

您需要執行左連接而不是內連接。但是這隻有在您的實體關聯在一起而不是包含彼此的ID時纔可能。

因爲,HQL顯然是不可能的。

根據您的查詢,您可能應該在Product和Manufacturer之間以及Product與Part之間的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"; 
+0

我在產品和零件表之間有多對一的關係。對不起有一個疑問,當我們做product.part不會我得到一個異常,如果我的partId在產品表中是空的 –

+0

如果你有一個ManyToOne,那麼你不應該在你的產品類中有一個partId字段,因爲它們將映射到同一個領域。不,你不會得到一個例外。你讀過關於HQL的Hibernate文檔嗎? –