下面列出了怎么用org.hibernate.event.spi.PreInsertEventListener的API类实例代码及写法,或者点击链接到github查看源代码。
private boolean preInsert() {
boolean veto = false;
final EventListenerGroup<PreInsertEventListener> listenerGroup = listenerGroup( EventType.PRE_INSERT );
if ( listenerGroup.isEmpty() ) {
return veto;
}
final PreInsertEvent event = new PreInsertEvent( getInstance(), getId(), getState(), getPersister(), eventSource() );
for ( PreInsertEventListener listener : listenerGroup.listeners() ) {
veto |= listener.onPreInsert( event );
}
return veto;
}
private boolean preInsert() {
final EventListenerGroup<PreInsertEventListener> listenerGroup = listenerGroup( EventType.PRE_INSERT );
if ( listenerGroup.isEmpty() ) {
// NO_VETO
return false;
}
boolean veto = false;
final PreInsertEvent event = new PreInsertEvent( getInstance(), null, getState(), getPersister(), eventSource() );
for ( PreInsertEventListener listener : listenerGroup.listeners() ) {
veto |= listener.onPreInsert( event );
}
return veto;
}
@Override
public void integrate(
Metadata metadata,
SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
EventListenerRegistry eventListenerRegistry =
serviceRegistry.getService(EventListenerRegistry.class);
Collection<PersistentClass> entityBindings = metadata.getEntityBindings();
Map<Class, BeanProperty> lastUpdates = new HashMap<>(entityBindings.size());
Map<Class, BeanProperty> dateCreated = new HashMap<>(entityBindings.size());
entityBindings.forEach(e -> {
Class<?> mappedClass = e.getMappedClass();
if (mappedClass != null) {
BeanIntrospection<?> introspection = BeanIntrospector.SHARED.findIntrospection(mappedClass).orElse(null);
if (introspection != null) {
introspection.getIndexedProperty(DateCreated.class).ifPresent(bp ->
dateCreated.put(mappedClass, bp)
);
introspection.getIndexedProperty(DateUpdated.class).ifPresent(bp ->
lastUpdates.put(mappedClass, bp)
);
}
}
}
);
ConversionService<?> conversionService = ConversionService.SHARED;
if (CollectionUtils.isNotEmpty(dateCreated)) {
eventListenerRegistry.getEventListenerGroup(EventType.PRE_INSERT)
.appendListener((PreInsertEventListener) event -> {
Object[] state = event.getState();
timestampIfNecessary(
dateCreated,
lastUpdates,
conversionService,
event,
state,
true
);
return false;
});
}
if (CollectionUtils.isNotEmpty(lastUpdates)) {
eventListenerRegistry.getEventListenerGroup(EventType.PRE_UPDATE)
.appendListener((PreUpdateEventListener) event -> {
timestampIfNecessary(
dateCreated, lastUpdates,
conversionService,
event,
event.getState(),
false
);
return false;
});
}
}