2011-09-20 45 views
3

我试图做一个JPQL查询,它应该从一个地图关联中获取一个实体和关键字,并且我得到一个bizzare错误。休眠JPQL - 在地图关联错误中查询KEY()

我的设置是使用Hibernate(3.5)实现的JPA2。

的模型如下:

我有一个部门实体bean如:

@Entity 

公共类系{

@Id 
@SequenceGenerator(name = "DEPARTMENT_ID_GENERATOR", sequenceName="department_sequence", allocationSize=100) 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "DEPARTMENT_ID_GENERATOR") 
@Column(unique = true, nullable = false) 
protected Long id; 

@OneToMany(fetch=FetchType.EAGER) 
private Map<String,Phone> phones = new HashMap<String, Phone>(); 

// ... getter和setter跟随

及其关联实体:

@Entity 

公共类电话{

@Id 
@SequenceGenerator(name = "PHONE_ID_GENERATOR", sequenceName="phone_sequence", allocationSize=100) 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "PHONE_ID_GENERATOR") 
@Column(unique = true, nullable = false) 
protected Long id; 
private int number; 

// ... getter和setter遵循

现在我认为,按照该 “掌握JPA2 ......” 的书,我可以做一个JPQL如:

String queryString2 = "SELECT d, KEY(p) FROM Department d JOIN d.phones p WHERE p='internal'"; 

,但是这一切都让我一个错误的bizzare:

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode 

- [METHOD_CALL] MethodNode: '(' + - [METHOD_NAME] IdentNode: 'KEY'{originalText = KEY} - [一个expr_list] SqlNode: 'exprList' - [ALIAS_REF] IdentNode:“phone2_.id “{别名= p,的className = model.Phone,tableAlias = phone2_}

at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:156)... 

有人可以告诉我,如果我使用的JPQ是错误的,如果是这样,什么可能是一个正确的替代品越来越一个实体和只有来自其地图关联之一的关键字?

回答

3

对于未来的读者,由米克Maunu mentionned的bug刚刚昨天解决了,所以我们只需要等待下一个版本:)

+2

昨天也是(4.1.4.Final) –