Как применить ограничение по умолчанию для отношений Entity-Bean @OneToMany

У меня есть две модели сущностей: Customer и Order. Каждый клиент может иметь тысячи заказов. У меня есть отношения OneToMany и ManyToOne между этими двумя объектами.

Как ограничить список этой взаимосвязи только 10 первыми заказами?

Можно ли применить условие «ГДЕ» в качестве атрибута к @OneToMany или нет?

Нравится:

@OneToMany("Where Order.orderNo > 100")

Моя проблема заключается в том, что объект, созданный Entity Manager, все заказы создаются в памяти. Отложенная загрузка не может решить мою проблему, потому что мне нужно получить 10 лучших заказов в построении по умолчанию.


person Nav    schedule 18.08.2010    source источник


Ответы (2)


Я имею в виду, можно ли применить условие «ГДЕ» в качестве атрибута к @OneToMany или нет?

Не со стандартным JPA. Но у некоторых провайдеров есть расширения для этого. Например, в Hibernate есть аннотация @Where:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@Where(clause="1=1")
public Set<Ticket> getTickets() {
    return tickets;
}

использованная литература

person Pascal Thivent    schedule 18.08.2010
comment
Что мы должны сделать для стандартного JPA? - person Nav; 18.08.2010
comment
@Navid: кроме использования запроса JPQL, ничего, JPA не поддерживает это. - person Pascal Thivent; 18.08.2010

JPA не поддерживает это. Но в EclipseLink вы можете использовать Expression для фильтрации отношения.

См. http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria

person James    schedule 28.06.2012