从@NamedQuery </string>中的@ElementCollection List <string>中选择DISTINCT值

时间:2014-09-22 14:54:00

标签: java hibernate jboss7.x jpa-2.0 jpql

对于一个项目,我正在尝试查找List @ElementCollection字段中的所有不同类别。每个foo实例都分配了一个或多个String类别。下面的代码不起作用,因为JBOSS / Hibernate在将耳朵部署到服务器时抛出异常:

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;

   ...
}

select distinct有什么不对吗?是否支持在@EllementCollection上执行'SELECT DISTINCT'?

任何帮助表示赞赏! 理查德

1 个答案:

答案 0 :(得分: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

其中Category是您必须创建的新实体。