2016-02-16 31 views
-1

模型O具有枚舉類型的元素集合。休眠查詢結果中的重複條目

的縮寫版本

@Entity 
class O { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @ElementCollection(fetch=FetchType.EAGER) 
    @JoinTable(name = "o_s", joinColumns = { @JoinColumn(name = "o_id") }) 
    @Column 
    private Set<SomeEnum> ss; 
} 

我查詢O的所有實例如下

List<O> ret=session.createCriteria(O.class).list(); 

現在結果列表包含重複的條目。

如果SS字段中有3個值,則O的對應條目將在結果中出現3次。

如果有2個值,則O的相應條目將在結果中出現2次。

但是,數據庫不包含重複的條目。

我已經憑經驗驗證了這一行爲。

我在做什麼錯?

回答

2

這是由您急切加載的集合引起的。您需要to setDictinctRootEntityResultTransformer到標準。

一個更好的選擇,國際海事組織,是使用HQL:

select distinct o from O o 
+0

謝謝!永遠不會猜測Eager加載的這種副作用! –