2009-09-10 53 views
1

我需要創建一個外連接查詢來檢索與特定公司關聯的所有定義和任何屬性。我的Hibernate的左對外連接的結果的好對象結構

我有兩個休眠模式對象:

class PropertyDefinition { 
    @Id 
    private Long id; 

    @Column 
    private String name; 

    @OneToMany(mappedBy = "propertyDefinition") 
    private Set<Property> properties = new HashSet<Property>(); 
} 

class Property { 
    @Id 
    private Long id; 

    @ManyToOne 
    private Integer companyId; 

    @ManyToOne 
    private PropertyDefinition propertyDefinition; 
} 

所以查詢最終看起來像:

from PropertyDefinition as pd left join pd.properties as props with props.companyId = :companyId 

因此,所有的桃色爲止。我遇到的問題是我將返回的數據存儲在哪種結構中? Hibernate返回一個List,其中[0]是PropertyDefinition(不應該爲null),[1]是可能的null屬性。

我的問題:

  • 它厭惡,而不是非常友好OO周圍通過對象[]裏的名單。
  • 我不能堅持PropertyDefinition,因爲它擁有的屬性列表不限於公司。
  • 我可以創建一個簡單的對象保存到PropertyDefinition和可能空屬性,但其效率低下的一個參考必須通過整個列表進行迭代,並把每一個進入這個新對象。

任何人都有更好的查詢或更好的映射結構的建議嗎?我非常感謝任何幫助。

回答

0

哦,通常留在集合連接是通過fetch它會返回填充集合容器對象的列表最好的處理。但是,由於您使用的是with條件,因此這不適用於您。

如果你創建PropertyDefinitionProperty適當的公共構造一個簡單的支架,你可以告訴Hibernate來返回:

select new Holder(pd, props) 
    from PropertyDefinition as pd 
    left join pd.properties as props 
    with props.companyId = :companyId 

應該採取你所列出的問題護理;這並不理想,但可能是在這種情況下可用的最佳解決方案。

+0

這正是我所期待的!非常感謝。 – jbarz 2009-09-14 15:36:39