Рассмотрим следующую модельJPA: Как извлечь жадностью вложенной коллекции элементов
@Entity
// JPA and JAXB annotations here
public class Employee implements Serializable {
// other fields, annotations, stuffs
...
@ElementCollection(fetch = FetchType.LAZY,
targetClass = Address.class)
@CollectionTable(name = "employee_address",
schema = "hris",
joinColumns = @JoinColumn(name = "employee_id",
nullable = false,
referencedColumnName = "employee_id",
foreignKey = @ForeignKey(ConstraintMode.CONSTRAINT)))
protected Set<Address> addresses;
// setters, getters
...
}
@Embeddable
// JAXB annotations here
public class Address implements Serializable {
// fields, setters, getters
}
Address
класс помечается @Embeddable
аннотацию, а Employee
класс имеет встроенный элемент коллекции из addresses
. Элемент коллекции fetch
установлен в FetchType.LAZY
. Теперь я хотел бы создать @NamedQuery
, который будет извлекать всех сотрудников с адресами, которые с нетерпением инициализируются. Зная, что JOIN FETCH
will only work with entity collections аннотируется с @OneToMany
или @ManyToMany
на основе JPA 2.1, как бы создать действительный запрос JPQL
, который позволит мне с нетерпением получить коллекции встроенных элементов?
Как вы пришли к выводу, что 'join fetch' работает только с объектами? Вы попробовали? –
@DraganBozanovic: на основании документации, «Ассоциация, на которую ссылается правая сторона предложения FETCH JOIN, должна быть ассоциацией, которая принадлежит сущности, которая возвращается в результате запроса. Не разрешается указывать идентификационной переменной для объектов, на которые ссылается правая сторона предложения FETCH JOIN, и, следовательно, ссылки на неявно получаемые объекты не могут появляться в другом месте запроса ». –
Путь к коллекции должен быть разрешен в поле ассоциации –