Как объявить модель Hibernate с денормализованной таблицей для производительности - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над бизнес-приложением с 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 обновляет таблицы аудита в прослушивателях событий.

Кажется, что вышеприведенное решение довольно хакерское, но я не знаю, как я смогусохранить фактическое значение в той же таблице, что и остальные атрибуты, таким образом избегая постоянного присоединения к таблице точности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...