У меня есть пользовательский слушатель событий Hibernate. Если сущность загрязнена, код пытается найти старые записи аудита для этой сущности. Проблема в том, что это вызывает ошибку переполнения стека.
Это мой слушатель:
@Component
public class MyCustomEventListener implements FlushEntityEventListener {
@Autowired
private AuditService service;
@Override
public void onFlushEntity(FlushEntityEvent event) throws HibernateException {
final Object entity = event.getEntity();
boolean isDirty = isDirty(event);
if (isDirty) {
service.auditEntity(entity);
}
...
}
...
}
И мой сервис:
@Service
public class AuditServiceImpl implements AuditService
public void auditEntity(BaseEntity entity) {
try {
String tableName = getTableName(entity);
Optional<AuditRecord> result = auditRepository.findFirstByTableNameAndRecordIdOrderByIdDesc(tableName, entity.getId());
...
}
...
}
}
Во время вызова искателя хранилища он каким-то образом снова запускает eventListener.