0

我有两个实体 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 域中进行改进,而不是特定于容器或数据库。

4

1 回答 1

1

private id;?? 遗漏字段类型

添加到@OneToMany注释,cascade = CascadeType.All

Customer entity = entityManager.find(Customer.class, id)   
for (Order order : entity.getOrderList())  
{
   order.setPaid(true);  
}  

如果您正在使用cantainer managed transaction,则将true保存到数据库

于 2012-09-01T10:51:12.277 回答