JPQL查询非entites集合

Ale*_*x M 3 java jpa jpql

我想用一组非实体进行JPQL查询.这是我的表实体:

@Entity
@Table(name = "ct_table")
public class Table {
...

@CollectionOfElements(fetch = FetchType.EAGER)
@JoinTable(name = "ct_table_result", joinColumns = @JoinColumn(name = "tableId"))
@MapKey(columns = { @Column(name = "label") })
@Column(name = "value")
private Map<String, String> tableResults;
...
Run Code Online (Sandbox Code Playgroud)

然后我尝试做这样的查询

select count(*) from table where table.tableResults['somekey'].value='somevalue'
Run Code Online (Sandbox Code Playgroud)

但我得到以下异常:

Cannot create element join for a collection of non-entities!
Run Code Online (Sandbox Code Playgroud)

有什么建议??

谢谢你的时间

编辑:

我使用JPA 1和hibernate 3.3.JBoss 5中的默认库

JB *_*zet 7

JPA 2规范(第139页)定义KEY()VALUE()功能,以访问该密钥和地图值元素集合中的值:

select count(t.id) from Table t 
where KEY(t.tableResults) = 'somekey' and VALUE(t.tableResults) = 'somevalue'
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,虽然这个版本的Hibernate支持JPA2,AFAIK,但仍然没有实现对KEY和VALUE的支持(参见https://hibernate.onjira.com/browse/HHH-5396),即使在当前版本中也是如此.Hibernate作为index()函数,但我不确定你可以在元素集合上使用它.见http://docs.jboss.org/hibernate/core/3.3/reference/en-US/html_single/.尝试以下方法:从表t中选择count(t.id)连接t.tableResults r其中index(r)='somekey'和r ='somevalue'.您还可以使用实体地图,而不是元素地图. (4认同)