Данного кода:HowTo карта Javers снимок для объекта с помощью JPA аннотаций/конвертера
public enum ApplicationStatus {
CREATED, VERIFIED, APPROVED, REJECTED, DELETED, PUBLISHED;
}
@lombok.Data // adds constructors, getters, setters, equals & hashcode
@Table("Application")
public class Application implements Serializable {
@Id @GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
private ApplicationStatus status;
@Transient
@Converter(HistoryConverter.class)
private List<Application> applicationHistory;
}
@Repository
@JaversSpringDataAuditable
public interface ApplicationRepository extends PagingAndSortingRepository<Application, Long> {}
@Component
@Converter
public class HistoryConverter implements AttributeConverter<Application, List<Application>> {
@Autowired
private Javers javers;
@Override
public List<Application> convertToDatabaseColumn(Application entity) {
List<CdoSnapshot> snapshots = javers.findSnapshots(QueryBuilder.byInstanceId(entity.getId(), Application.class).build())
return snapshots.stream().map(s -> convertToEntity(s.getState())).collect(Collectors.toList());
}
private Application convertToEntity(CdoSnapshot snapshot) {
JsonConverter gson = javers.getJsonConverter();
String json = gson.toJson(state);
return gson.fromJson(json, Application.class);
}
@Override
public Application convertToEntityAttribute(List<Application> dbData) {
throw new UnsupportedOperationException();
}
}
Как сделать JPA использовать мой конвертер для преобразования снимок получили от javers обратно в объект объекта Application для списка объектов истории?
Я не нашел то, что искал в Google. Только поток, говорящий, что в будущем будет возможно получить объект из моментального снимка. Для такого простого объекта, который я использую, это можно сделать, как показано выше. Но как его можно включить в код, так что моментальные снимки могут использоваться как запись истории.
Javers хранит новый снимок для каждой сохраненной смены объекта в базе данных в собственной таблице. Поле состояния/столбец кодируется json Gson (внутренне). Таким образом, использование Gson для преобразования его в объект можно сделать следующим образом. Эта концепция работает, но не автоматически. Можете ли вы, пожалуйста, помочь мне включить javers в качестве встроенного механизма истории в свой код?
Разумеется, изменения в классе сущностей, а также в классе преобразователей приветствуются, но история должна выполняться с помощью снимков javers, а не заново изобретать колесо, вводя новый объект с историческим состоянием и обрабатывая его как отдельную сущность.
AttributeConverter предназначен для преобразования из значения поля в значение хранилища данных. Поле является переходным, поэтому нет понятия ценности хранилища данных, поэтому он не будет использоваться. –
@NeilStockton: Как я уже сказал, вы можете предложить смену данного кода. Я знаю, что в его нынешнем состоянии это не работает, но в этом весь смысл этого форума, чтобы помочь дать ответы. – termil0r
Я просто объясняю, ПОЧЕМУ это не работает. Я бы подумал, что это добавит к вашим знаниям ... –