0

我有一个看起来像这样的实体。

@Entity
@XmlRootElement
class Parent {

    // No getters nor setters for 'children'
    // Don't attack via reflection!

    @OneToMany(cascade = {CascadeType.REMOVE}, mappedBy = "parent") // lazy, huh?
    @XmlTransient
    private Collection<Child> chilren; // MILLIONS OF THEM, say.
}

children我只为标准查询映射。

@StaticMetamodel(Parent.class)
class Parent_ {

    public static volatile CollectionAttribute<Parent, Child> children;
}

我的问题是,以children这种方式映射它们是否安全?是否有可能在任何情况下chilren从数据库中获取Parent

4

1 回答 1

2

如果你永远不想访问这种关系,我不会映射它。您应该能够使用 ManyToOne 而不是 OneToMany 来定义大多数查询。

如果您使用的是 EclipseLink,您还可以为仅在查询中使用的关系定义查询键,

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Query_Keys

您永远不会访问的 LAZY OneToMany 可能是安全的,但您需要非常小心,不要做任何会导致它实例化的事情。级联删除可能是一个坏主意,因为它会导致它在删除时被实例化。

于 2013-07-03T13:04:46.860 回答