Я пытаюсь сделать JPQL-запрос, который должен извлечь сущность и ключи из одной из ассоциаций карты, и я получаю странную ошибку.
Моя настройка - JPA2 с использованием реализации Hibernate (3.5).
Модель выглядит следующим образом:
У меня есть бин сущности Department, такой как:
@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>();
// ... геттеры и сеттеры следуют
и связанный с ним объект:
@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;
// ... геттеры и сеттеры следуют
Теперь я подумал, что в соответствии с книгой "Освоение 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, который я использую, является неправильным, и если да, что может быть правильной альтернативой получению сущности и ТОЛЬКО ключей от одной из ассоциаций карты?