Я хотел протестировать запрос с присоединением атрибута Map для одной конкретной записи MapKey, и я еще не смог найти решение. Кто-нибудь когда-либо выполнял такой запрос и мог использовать правильный JPQL/HQL?JPA/Hibernate: Можете ли вы создать запрос соединения для конкретного MapKey?
Столбец MapKey имеет тип enum
, а значение равно @Entity
.
Это модель:
@Entity
public class Operation {
@Id
private int id;
@OneToMany(mappedBy = "operation", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
@MapKeyEnumerated(EnumType.STRING)
private Map<OperationDetailsType, OperationDetails> operationDetails;
}
@Entity
public class OperationDetails {
@Id
private int id;
private String details;
}
public enum OperationDetailsType { SHORT, FULL }
Это запрос, я в настоящее время пытался:
SELECT operation FROM Operation operation join operation.operationDetails['SHORT'] operationDetailsShort WHERE operationDetailsShort.details = :el1
Я нашел эту ссылку в спящем сообществе, но подход с [...]
вызывает ошибку : https://forum.hibernate.org/viewtopic.php?f=1&t=1004884
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: [ near line 1,...
Hibernate версии: 4.3.8.Final
Благодаря
Одно наблюдение только. WITH является ключевым словом HQL. Эквивалент JPQL включен, что приводит к условию ON JOIN в результирующем SQL. –
Спасибо за информацию. Я попробую его и обновить ответ, если это тоже работает –
Добро пожаловать. ON был добавлен в [JPA 2.1] (http://www.thoughts-on-java.org/jpa-21-overview/), поэтому стоит также упомянуть об этом. –