Java Hibernate JPQL-查询映射关联中的键()时出错

Java Hibernate JPQL-查询映射关联中的键()时出错,java,hibernate,jpa-2.0,jpql,Java,Hibernate,Jpa 2.0,Jpql,我试图创建一个JPQL查询,该查询应该从它的一个映射关联中获取一个实体和键,但我得到了一个奇怪的错误 我的设置是使用Hibernate(3.5)实现的JPA2 模型如下: 我有一个部门实体bean,例如: @Entity 公共课系{ @Id @SequenceGenerator(name = "DEPARTMENT_ID_GENERATOR", sequenceName="department_sequence", allocationSize=100) @GeneratedValue(str

我试图创建一个JPQL查询,该查询应该从它的一个映射关联中获取一个实体和键,但我得到了一个奇怪的错误

我的设置是使用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>();
公用电话{

@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;
//…后来居上

现在我想,根据《精通JPA2…》一书,我可以做一个JPQL,比如:

String queryString2 = "SELECT d, KEY(p) FROM Department d JOIN d.phones p WHERE p='internal'";
但这一切让我犯了一个奇怪的错误:

java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode 
-[方法调用]方法节点:'(' +-[METHOD_NAME]IdentNode:'KEY'{originalText=KEY} -[EXPR_LIST]SqlNode:'exprList' -[ALIAS_REF]IdentNode:'phone2_u2;.id'{ALIAS=p,className=model.Phone,tableAlias=phone2_2;}

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

有人能告诉我我使用的JPQ是否错误,如果是,那么除了从一个映射关联中获取实体和键之外,还有什么正确的替代方法吗?

您的语法是正确的,这是因为映射的键和值没有实现:
我不知道还有其他查询。

对于下一位读者,Mikko Maunu提到的错误昨天刚刚解决,所以我们只需要等待下一个版本:)

也是昨天(4.1.4.Final)
at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:156)...