Я работаю над бизнес-приложением с Spring Boot 2 и Hibernate.Предположим простую сущность:
@Entity
public class Project extends BaseEntity {
@Column private String name;
@Column private String address;
...
}
Здесь BaseEntity
- это @MappedSuperclass
с некоторыми @Id
и другими общими атрибутами.Требование заключается в том, что атрибут name
и address
должен иметь некоторый атрибут «точность»: в зависимости от того, откуда поступают данные, то есть от того, кто вводит их в систему, точность считается выше или ниже.Точность содержит дополнительные свойства и должна быть учтена, т. Е. С точки зрения приложения важно получать значения точности с течением времени.
Я ищу лучший способ смоделировать это.Одним из желаемых свойств решения является то, что должна быть возможность извлекать текущее фактическое значение name
/ address
, не присоединяясь к какой-либо другой таблице, для обеспечения быстрого чтения.
Моя первоначальная идея состояла в том, чтобыопределите @Embeddable
как ValueWithReferencedAccuracy<T>
, который содержит T value
и ссылку на некоторый AccuracyValue<T>
.Однако, поскольку у меня в Project
имеется более одного атрибута, который должен быть связан с AccuracyValue
, я должен был бы закодировать, к какому атрибуту относится.Это звучит довольно плохо.Также существует проблема синхронизации строк Project
и AccuracyValue
.Я заметил, что моя проблема похожа на проблему аудита, и обнаружил, что Envers обновляет таблицы аудита в прослушивателях событий.
Кажется, что вышеприведенное решение довольно хакерское, но я не знаю, как я смогусохранить фактическое значение в той же таблице, что и остальные атрибуты, таким образом избегая постоянного присоединения к таблице точности.