Вы можете получить список java.util. Map.Entry .Поэтому коллекция в вашей сущности должна быть смоделирована как Map:
@OneToMany
@MapKeyEnumerated(EnumType.STRING)
public Map<PhoneType, PhoneNumber> phones;
В примере PhoneType - это простое перечисление, PhoneNumber - это сущность.В своем запросе используйте ключевое слово ENTRY
, которое было введено в JPA 2.0 для операций с картой:
public List<Entry> getPersonPhones(){
return em.createQuery("SELECT ENTRY(pn) FROM Person p JOIN p.phones pn",java.util.Map.Entry.class).getResultList();
}
Теперь вы готовы получить записи и начать работать с ними:
List<java.util.Map.Entry> phoneEntries = personDao.getPersonPhoneNumbers();
for (java.util.Map.Entry<PhoneType, PhoneNumber> entry: phoneEntries){
//entry.key(), entry.value()
}
Если вам все еще нужны записи на карте, но вы не хотите просматривать список записей вручную, просмотрите этот пост Преобразовать набор> к HashMap, который работает с Java 8.