我有两个实体 Customer 和 Order(不包括琐碎的 setter 和 getter)
@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)
我正在使用容器管理的事务、glassfish 和 javaDb。但我更希望可以在 JPA/JPQL 域中进行改进,而不是特定于容器或数据库。