Управление версиями строк в базе данных Oracle в приложении на Spring + JPA? - PullRequest
0 голосов
/ 26 октября 2018

Есть приложение Spring + jpa + oracle.

Необходимо хранить историю строк и версий.1) покоя мне нужно получить последние n строк с номером версии.2) Нет операций удаления или обновления - только запись \ readFresh \ getAllFromHistory

Какой способ реализации является лучшим?

1 Ответ

0 голосов
/ 26 октября 2018

Это действительно зависит, но я рекомендую вам использовать одну из дополнительных функций / аннотаций, таких как:

  1. @Version для автоинкрементного свойства / свойства, чтобы узнать, сколько раз версия изменилась,
  2. @CreationTimestamp для свойства, обозначающего дату создания объекта / записи
  3. @UpdateTimestamp для свойства, обозначающего дату последнего обновления записи

Хороший способ реализовать т. Е. Управление версиями для всех ваших сущностей - использовать @MappedSuperclass в классе AbstractJpa, т. Е .:

@MappedSuperclass
public abstract class AbstractJpa {

    // some code
    private Long version;

    // getters and setters
    @Version
    @Column(name = "version_number")
    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }
}

Затем вы наследуете / расширяете его в других ваших сущностях, т.е.

@Entity
@Table(name = "my_entity")
public class MyEntity extends AbstractJpa {
    // some code, properties, getters/setters ...
}

ВАЖНОЕ ЗАМЕЧАНИЕ: Если вы намереваетесь сохранить все предыдущие записи , то логично сделать вывод, что вы, как правило, также будете иметь какую-то реализацию "мягкого удаления". То есть вы намерены иметь некоторое логическое значение is_deleted в вашей базе данных, и ваш @MappedSuperclass также может иметь такой столбец / свойство, которое также определено. В то же время вы должны использовать опцию вставки для каждого предполагаемого «обновления», то есть вы будете вставлять новые строки (persist(myObject)) каждый раз, когда вы выпускаете обновление, вместо выполнения merge(myObject).

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

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