如何在不刷新整个实体的情况下刷新实体子项?

时间:2015-07-17 23:14:52

标签: hibernate jpa

我在DB中有一个非常干净的PARENT-CHILD案例场景,它反映在相应的实体对象中:

父:

@Entity
@Table(name="TBL_PARENT")
@NamedQueries(...)
public class Parent implements Serializable {

    ...

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "parent", fetch = FetchType.EAGER)
    private List<Child> childList;

    ...

    public List<Child> getChildren() {

        if(this.childList != null) {
            Collections.sort(this.childList);
        }

        return this.childList;
    }

儿童:

@Entity
@Table(name="TBL_CHILD")
@NamedQueries(...)

public class Child implements Serializable, Comparable<Child> {

    ...

    @JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID", insertable = true, updatable = false)
    @ManyToOne(optional = true)
    private Parent parent;

由于上述注释指定的JPA框架执行子数据的加载,我不需要指定加载数据的方法 - 加载Parent时,它的Child ren会自动加载。

但是,我正在寻找一种方法来按需刷新孩子而不需要刷新整个父母。当我在现有父级上调用getChildren()时,该方法实际上不会在请求时刷新子级,而只是重用以前加载和缓存的数据。我可以在不重新加载整个父对象的情况下以某种方式对孩子进行刷新吗?

我们正在使用JPA,但据我所知,它在后端使用了一些Hibernate库。

1 个答案:

答案 0 :(得分:1)

您可以明确刷新孩子:

for (Child child : parent.getChildren()) {
   entityManager.refresh(child);
}