对于一个项目,我正在尝试查找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'?
任何帮助表示赞赏! 理查德
答案 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是您必须创建的新实体。