Hibernate JPQL - 在Map关联错误中查询KEY()

时间:2011-09-20 18:37:36

标签: java hibernate jpa-2.0 jpql

我正在尝试创建一个JPQL查询,该查询应该从其中一个地图关联中获取一个实体和键,并且我收到了一个奇怪的错误。

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

模型如下:

我有一个Department实体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>();

// ... getters and setters关注

和它的关联实体:

@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;

// ... getters and setters关注

现在我想,按照“掌握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_CALL] MethodNode:'('     + - [METHOD_NAME] IdentNode:'KEY'{originalText = KEY}      - [EXPR_LIST] SqlNode:'exprList'         - [ALIAS_REF] IdentNode:'phone2_.id'{alias = p,className = model.Phone,tableAlias = phone2 _}

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

有人可以告诉我,如果我使用的JPQ是错误的,如果是的话,什么可能是一个正确的替代方法来获取一个实体,只有一个地图关联的密钥?

2 个答案:

答案 0 :(得分:3)

你的语法是正确的,这是因为KEY&amp;未实现地图的值: https://hibernate.onjira.com/browse/HHH-5396我不知道其他查询。

答案 1 :(得分:3)

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