Это действительно зависит, но я рекомендую вам использовать одну из дополнительных функций / аннотаций, таких как:
@Version
для автоинкрементного свойства / свойства, чтобы узнать, сколько раз версия изменилась,
@CreationTimestamp
для свойства, обозначающего дату создания объекта / записи
@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)
.
Все зависит от вашего конкретного сценария и варианта использования, но это будет несколько общих вещей, которые нужно искать в Интернете, надеюсь, это поможет.