Hibernate拦截器插入

时间:2016-09-23 05:51:56

标签: hibernate

我想拦截所有插入的实体。

onSave是预插入实体,postFlush包含插入和更新实体。

如何通过Hibernate Interceptor获取插入后的实体?

2 个答案:

答案 0 :(得分:0)

Hibernate中也有6个触发器  1. PreInsert  2. PostInsert  3. PreUpdate  4. PostUpdate  5. PreDelete  6. PostDelete

这些触发器在每次数据库操作后都被称为名称状态。 现在你需要做的是定义这些触发器是像这样的Hibernate的sessionFactory

private static SessionFactory buildSessionFactory(Properties props,
        URL cfgUrl) {

    Configuration configuration = new Configuration();
    configuration.configure(cfgUrl).addProperties(props);

    serviceRegistry = new ServiceRegistryBuilder().applySettings(
            configuration.getProperties()).buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory)
            .getServiceRegistry().getService(EventListenerRegistry.class);
    registry.getEventListenerGroup(EventType.PRE_INSERT).appendListener(
            new GrPreInsertEventListener());
    registry.getEventListenerGroup(EventType.PRE_UPDATE).appendListener(
            new GrPreUpdateEventListener());
    registry.getEventListenerGroup(EventType.MERGE).appendListener(
            new GrPreMergeEventListener());
    return sessionFactory;
}

答案 1 :(得分:0)

由于你提到了Hibernate拦截器 - 你可以识别插入例如onFlushDirty(...),如果前一个状态有空id,只要你没有手动分配id但生成它们。