2016-02-27 2 views
0

Я нахожусь в Hibernate (5.1), и мне нужно добавить элемент в поле коллекции для всех объектов, соответствующих критериям, без необходимости их извлечения.JPA добавить элемент в коллекцию, используя CriteriaUpdate

@Entity 
public class Order { 

    @Id 
    public Long id; 

    public Date placedOn; 

    @ManyToMany 
    public List<Item> items; 

} 

Мне нужно добавить тот же экземпляр нового Item всех Order с размещенным после определенной даты. Мне нужно использовать API критериев, а не JPQL.

Возможно ли это? Я не могу найти документацию по этому вопросу.

P.S. Случай order/items является всего лишь примером, я ищу обобщенный метод, и мне также нужно будет его адаптировать для удаления элементов из коллекций.

ответ

0

Вы не можете сделать это с помощью CriteriaUpdate, потому что это не обновление, а множество вставок, потому что у вас есть отношение ManyToMany, которое передается в таблице отношений в базе данных.

Итак, вы должны запросить все Заказы, а затем добавить элемент, который затем сгенерирует инструкции insert.

+0

Я боялся этого. Я знаю, что это не SQL 'UPDATE', но я думал, что JPA имеет какой-то JPQL' UPDATE Order o INSERT: item INTO o.items' и его метод относительных критериев. Так как в своих реализациях JPA в своих возможностях делают эти «INSERT's» при обновлении полей сбора, я надеялся, что они также предоставили средства, позволяющие пользователям делать такие операции программно ... –

+0

Нет, он не может этого сделать. Потому что вы не можете сделать это ни в одном выражении SQL. –

+0

JPA не делает магии, он просто имеет другой язык запросов, который в конце концов преобразуется в SQL. –

Смежные вопросы