Hibernate JPQL - запрос KEY () в ошибке сопоставления карты - PullRequest
3 голосов
/ 20 сентября 2011

Я пытаюсь сделать 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, который я использую, является неправильным, и если да, что может быть правильной альтернативой получению сущности и ТОЛЬКО ключей от одной из ассоциаций карты?

Ответы [ 2 ]

3 голосов
/ 31 мая 2012

Для следующих читателей ошибка, упомянутая Микко Мауну, только что была устранена вчера, поэтому нам просто нужно дождаться следующего релиза:)

3 голосов
/ 21 сентября 2011

Ваш синтаксис правильный, это потому, что KEY & VALUE для карт не реализованы: https://hibernate.onjira.com/browse/HHH-5396 Мне неизвестен альтернативный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...