JPAにおける多対多の関係に関するもう1つの問題。データベースには次の構造があります。
______ ___________ _______
| 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を使用しているので、プレーンSQLはオプションではありません。