2014-09-22 21 views
0

對於一個項目,我試圖查找List @ElementCollection字段中的所有不同類別。每個foo實例都有一個或多個分配的字符串類別。下面的代碼不起作用爲JBOSS /休眠拋出部署EAR到服務器時異常:選擇DISTINCT值表單@ElementCollection列表<String> @NamedQuery

Error in named query: Foo.listUniqueCategories: org.hibernate.QueryException: not an entity [SELECT DISTINCT f.categories FROM com.Foo f] 

我有類:

@Entity(name = "Foo") 
@NamedQuery(name = "Foo.listUniqueCategories", query = "SELECT DISTINCT f.categories FROM Foo f") 
public class FooEntity 
{ 
    @Id() 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    protected Long id; 

    @ElementCollection 
    @CollectionTable(name = "categories", joinColumns = @JoinColumn(name = "foo_id")) 
    private List<String> categories; 

    ... 
} 

這有什麼錯的選擇不同?是否支持在@EllementCollection上執行'SELECT DISTINCT'?

任何幫助表示讚賞! Richard

+1

你不能在你的查詢中選擇這樣一個集合:https://forum.hibernate.org/viewtopic.php?f = 1&t = 963660 – user3487063 2014-09-22 15:01:49

+0

你把我放在正確的軌道上。感謝您的信息!我通過將查詢更改爲@NamedNativeQuery直接查詢JPA生成的表來解決它。 – Bjarne77 2014-09-23 08:12:31

+0

呃..我的答案有點太快了。 NamedNativeQuery方法導致了這個bug:http://jdevelopment.nl/hibernates-pure-native-scalar-queries-supported/ 所以我要去一個名爲Category的@Embeddable類。 – Bjarne77 2014-09-23 09:25:23

回答

0

您在HQL和SQL之間感到困惑。用以下替換您的命名查詢。命名查詢總是HQL。

SELECT distinct f.categories FROM FooEntity f 

但是,我不確定這是否會起作用。如果你需要找出不同的類別,爲什麼在FooEntity上查詢?爲什麼不爲類創建實體並運行如下所示的查詢。此外,要調用列表這是不對的,以及在聯接列,它應該加入對實體類型,如下面

@ElementCollection 
    @CollectionTable(name = "categories", joinColumns = @JoinColumn(name = "foo_id")) 
    private List<**Category**> categories; // replace String with Category 

-

select distinct category.name from Category c 

那些類別,你有一個新的實體創建。