Я использую средство @RepositoryRestResource, но я хотел бы выполнять вычисления (в зависимости от внешней службы) над временным полем каждый раз, когда пользователь выполняет операцию чтения GET, поиск и т. д..
Если бы в списке было событие AfterGet/AfterFind, я мог бы обработать модификацию, расширив AbstractRepositoryEventListener
Любое чистое предложение?
Возможное решение — слушатель сущностей @PostLoad. Традиционно было немного взломано, чтобы сделать прослушиватель сущностей пружинным, однако здесь есть ответ, предполагающий, что теперь это просто в последних версиях Spring/Hibernate. Если нет, то существуют другие решения. stackoverflow.com/a/55452014/1356423
Спасибо! Но мне нужно вызвать внешнюю службу, я не уверен, что имеет смысл вводить зависимость ни в объект для @PostLoad, ни в EntityListener без сохранения состояния
Мой расчет основан на внешнем вызове, куда мне его поместить, если сущности и EntityListeners должны быть без гражданства?
Что вы подразумеваете под лицом без гражданства в этом контексте?
An entity listener is a stateless class with a no-arg constructor. An entity listener is defined by annotating the entity class with the @EntityListeners annotationdocs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/…Я думаю, что выразил это нехорошими словами. Код, который выполняет вызов, находится во внешней зависимости, я должен найти способ внедрить его в EntityListener, но это не разрешено




Я нашел способ благодаря предложению @Alan Hay.
@Entity
@EntityListeners(TransientFieldResolver.class)
public class Entity {
private Long id;
private String transientField;
}
@Component
public static class TransientFieldResolver {
private static ExternalService externalService;
@Autowired
public void setExternalService(ExternalService externalService) {
TransientFieldResolver.externalService = externalService;
}
@PostLoad
public void onPostLoad(final Entity entity) {
if (Objects.isNull(entity.getTransientField())) {
TransientFieldResolver.externalService.fillTransientField(entity);
}
}
}
По иронии судьбы у меня есть проект, в котором принимаются внедренные объекты без конструктора без аргументов, но он не соответствует всем проектам... или либо недавно разрешенная функция
как насчет использования АОП?