Customer と Order の 2 つのエンティティがあります (自明なセッターとゲッターは除外されます)。
@Entity
public class Customer {
@GeneratedValue
@Id
private int id;
@OneToMany
List<Order> orderList;
}
@Entity
public class Order {
@GeneratedValue
@Id
private int id;
@ManyToOne
Customer customer;
private boolean paid;
public Order(Customer customer) {
this.customer = customer;
customer.getOrderList().add(this)
}
}
今、私は特定の顧客のすべての注文に対して 'paid = true' を設定したい以下のクエリはトリックを行うようですが、非効率的であると感じ、逆の関係を Customer.orderList に保存したという事実はそこにあることを示唆していますこれを行うには他の方法があるはずです。
UPDATE Order o SET o.paid = true WHERE EXISTS
(SELECT c.orderList FROM Customer c WHERE o MEMBER OF c.orderList AND c = :customer)
コンテナー管理トランザクション、グラスフィッシュ、および JavaDb を使用しています。しかし、コンテナーやデータベースに固有のものではなく、JPA/JPQL ドメインで改善を行うことができればと思います。