2014-09-22 22 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 

那些类别,你有一个新的实体创建。