Java 从@element集合列表中选择不同的值<;字符串>;在@NamedQuery中
对于一个项目,我试图在List@ElementCollection字段中查找所有不同的类别。每个foo实例都分配了一个或多个字符串类别。以下代码不起作用,因为JBOSS/Hibernate在将ear部署到服务器时引发异常:Java 从@element集合列表中选择不同的值<;字符串>;在@NamedQuery中,java,hibernate,jboss7.x,jpa-2.0,jpql,Java,Hibernate,Jboss7.x,Jpa 2.0,Jpql,对于一个项目,我试图在List@ElementCollection字段中查找所有不同的类别。每个foo实例都分配了一个或多个字符串类别。以下代码不起作用,因为JBOSS/Hibernate在将ear部署到服务器时引发异常: Error in named query: Foo.listUniqueCategories: org.hibernate.QueryException: not an entity [SELECT DISTINCT f.categories FROM com.Foo f]
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;
...
}
@Entity(name=“Foo”)
@NamedQuery(name=“Foo.listUniqueCategories”,query=“从Foo f中选择不同的f.categories”)
公共类实体
{
@Id()
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
保护长id;
@元素集合
@CollectionTable(name=“categories”,joinColumns=@JoinColumn(name=“foo\u id”))
私人名单类别;
...
}
这台机器有什么问题吗?甚至支持对@EllementCollection执行“选择不同”吗
感谢您的帮助!
Richard您对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
其中类别是必须创建的新实体 您不能在查询中选择这样的集合:您将我放在了正确的轨道上。谢谢你的信息!我通过直接查询JPA生成的表将查询更改为@namedNaviRequesty来解决这个问题。。我的回答有点太早了。NamedNativeQuery方法导致了这个bug:所以我选择了一个名为Category的@Embeddeble类。
select distinct category.name from Category c