我想拦截所有插入的实体。
onSave
是预插入实体,postFlush
包含插入和更新实体。
如何通过Hibernate Interceptor获取插入后的实体?
答案 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但生成它们。