【发布时间】:2018-01-25 14:02:01
【问题描述】:
Hibernate 返回 org.hibernate.collection.internal.PersistentSet 作为 @OneToMany 关系上的 Set 实现:
@OneToMany(mappedBy = "group", cascade = CascadeType.PERSIST)
private Set<Student> studentSet;
Hibernate 跟踪PersitanceSet 上的所有更改(如果某些实体将被添加到 Set 中,那么它将被插入到数据库等中)。是否可以为 JPA EntityManager、org.hibernate.Session 或其他方式获得的集合提供相同的功能?
例如:
entityManager.createQuery(query, Student.class)
.setParameter("name", name)
.getResultList();
不返回此类集合。
所以我正在寻找通过自定义查询获取元素并将元素收集到 Hibernates 跟踪所有更改的集合的方法(在添加新的临时实体时插入,在更改托管实体时更新,在从集合中删除时删除)
【问题讨论】:
-
你的意图是什么?
getResultList()返回一个列表,它可以是供应商特定的实现。就像 Hibernate 中的 PersistentList 一样,它实现了您提到的行为。 -
@GeorgHenkel,我正在寻找通过自定义查询获取元素并将元素收集到 Hibernates 跟踪所有更改的集合的方法(在添加新的临时实体时插入,在更改托管实体时更新,在删除时删除来自集合)
-
EntityManager 返回一个包含托管实体的列表。只要您处于活动事务中,就会跟踪对它们的所有更改(写回数据库)。