2012-05-25 5 views
2

Просто еще один, касающийся отношений многих и многих в JPA. У меня есть следующая структура в моей базе данных:JPA много-ко многим обновлениям

______  ___________  _______ 
| user | | user2item | | item | 
|------| |-----------| |-------| 
| id | | user_id | | id | 
| name | | item_id | | name | 
------  -----------  | type | 
           ------- 

Теперь я хочу, чтобы обновить assingment от одного пользователя к элементам данного типа. Так что, к сожалению, я просто не могу:

user.setItems(newItemList); 

потому что он удалит присвоения предметам других типов. В обычный старый SQL я хотел бы сделать:

DELETE FROM user2item WHERE user_id = ? AND item_id IN (SELECT id FROM item WHERE type=?); 
INSERT INTO user2item (user_id, item_id) VALUES(?,?); 

Но, как я использую JPA с QueryDSL простой SQL не вариант.

ответ

0

Если я правильно понял, вы хотите удалить все элементы данного типа из списка элементов, а затем добавить в этот список другие элементы.

List<Item> items = user.getItems(); 
for (Iterator<Item> it = items.iterator(); it.hasNext();) { 
    Item item = it.next(); 
    if (item.getType().equals(theType)) { 
     it.remove(); 
    } 
} 
items.addAll(newItemList); 

Основные манипуляции с коллекцией. Вероятно, вы должны инкапсулировать эту логику в метод объекта User.

+0

Благодарим за быстрый ответ - так я начал внедряться как временное обходное решение. Но я думал, что должен быть более элегантный способ сделать это, используя причудливые функции JPA/QueryDSL. – LordHelmchen

0

Если user2item недоступен как сущность, вам необходимо выразить его через вашу модель домена. Альтернативные решения для вашего случая - использование собственных запросов с Querydsl JPA или использование собственных запросов в строковой форме.

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