关于JPA中多对多关系的另一个问题。我的数据库中有以下结构:
______ ___________ _______
| user | | user2item | | item |
|------| |-----------| |-------|
| id | | user_id | | id |
| name | | item_id | | name |
------ ----------- | type |
-------
现在我想将一个用户的分配更新为给定类型的项目。所以不幸的是我不能简单地做到:
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(?,?);
但是因为我正在使用带有QueryDSL的JPA,所以没有选项。
答案 0 :(得分: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实体的方法中。
答案 1 :(得分:0)
如果user2item不可用作实体,则需要通过域模型表达。针对您的案例的替代解决方案是使用Querydsl JPA的Native查询或使用字符串形式的Native查询。