2016-02-27 129 views
0

我在Hibernate(5.1)上,我需要将元素添加到符合条件的所有实体上的集合字段,而无需全部获取它们。JPA将元素添加到使用CriteriaUpdate的集合

@Entity 
public class Order { 

    @Id 
    public Long id; 

    public Date placedOn; 

    @ManyToMany 
    public List<Item> items; 

} 

我需要添加一个新的Item同一实例的所有Order S置于一个特定日期之后。我需要使用Criteria API,而不是JPQL。

这可能吗?我找不到这方面的文档。

P.S.订单/商品的情况只是一个例子,我正在寻找一种广义的方法,我还需要调整它以从集合中移除项目。

回答

0

你不能使用CriteriaUpdate来做到这一点,因为它不是一个更新,而是许多插入,因为你有一个ManyToMany关系在数据库中的关系表上进行中继。

因此,您必须查询所有订单,然后添加将生成插入语句的项目。

+0

我很害怕这个。我知道它不是SQL UPDATE,但我认为JPA有某种JPQL UPDATE Order o INSERT:item INTO o.items和它的相对Criteria方法。由于在他们的发作版中,JPA实现在更新集合字段时执行这些'INSERT',我希望他们也提供了让用户以编程方式执行这些操作的方法... –

+0

不,它不能这样做。因为你不能在一个SQL语句中这样做。 –

+0

JPA没有神奇,它只是另一种查询语言,最终转换为SQL –