如何检查实体是否有一个父实体,该实体将此实体映射到 @OneToMany 注释。 映射是在父
上定义的单向@Entity
public class ParentEntity {
...
@OneToMany(cascade=CascadeType.ALL)
private Collection<ChildEntity> childEntities;
...
Hibernate自动创建一个映射表,或者如果 @JoinColumn 使用子表中具有parent-id的列。 当子进程持久化时,hibernate会将相应的父ID添加到db-table。
我不想定义双向关系,因为我在我的应用程序逻辑中不需要这个“功能”,并且已经有大量需要更改的实体。我只需要父母来解决复制问题。这意味着我必须将一些数据导出到另一个数据库模式(具有不同的表结构)。
我使用拦截器来触发拦截器接口定义的“onSave”方法中的复制操作。如果父母得到一个新的孩子,那么只有孩子触发的持续动作。我不知道它所属的父母。
我真的很感激任何帮助!
谢谢!
答案 0 :(得分:3)
int count = session.createCriteria(Parent.class)
.createCriteria("childEntities")
.add(Restrictions.eq(childIdInQuestion))
.setProjetction(Projections.rowCount())
.uniqueResult();
Boolean hasParent = count > 0;
答案 1 :(得分:0)
我在不使用查询的情况下找到了问题的答案。
Hibernate的Interceptor接口定义了三个有关集合的方法。
如果实体上的集合(本例中为ParentEntity)被更改,则会调用以下三种方法之一:
public void onCollectionRecreate(Object collection, Serializable key)
throws CallbackException {
}
public void onCollectionRemove(Object collection, Serializable key)
throws CallbackException {
}
public void onCollectionUpdate(Object collection, Serializable key)
throws CallbackException {
}
对象“集合”的类型为 PersistenceBag ,可以从中读取“所有者”。在这种情况下,这将是父母。另一个提示:方法的第二个参数是“所有者”的休眠键。为了我的目的,我有一个配置文件,它将Hibernate实体映射到目标系统上的表。在此配置中,定义了parnent java类。