【发布时间】:2021-09-03 20:52:39
【问题描述】:
我目前正在尝试在我的 Spring Boot 应用程序中实现版本系统。
客户提交了价值 300 美元的产品订单 -> 现在,如果我的客户将产品订单的价格更改为 350 美元,旧订单仍应显示 300 美元。
经过一些研究,我认为 Hibernate Envers 适合我的用例。
我尝试使用这个例子Mapping to an older revision of an entity with JPA annotations
应该是直截了当的。在创建订单时,我保存 productId 和产品的当前版本。 然后每次 postload 我都会使用 hibernate auditreader 获得适当的修订。
@PersistenceContext
val entityManager: EntityManager? = null;
@Autowired
val sessionFactory: SessionFactory? = null
@Entity
@Table(name="ORDER_TABLE")
@JsonIgnoreProperties(ignoreUnknown = true)
class Order(
var productId:Int?,
var productRevision: Int?,
@OneToOne
var product: Product
) : BaseEntity() {
@PostLoad
fun loadProduct() {
// val auditReader = AuditReaderFactory.get(entityManager)
val auditReader = AuditReaderFactory.get(sessionFactory?.currentSession)
val query = auditReader.createQuery()
.forEntitiesAtRevision(Product::class.java, product.id)
.add(AuditEntity.id().eq(id))
product = query.singleResult as Product
}
}`
我无法让它工作,因为我无法在 Jpa 实体中获取 entityManager 或 Hibernate Session
这对我的用例是否可行,或者我应该看看不同的东西。
【问题讨论】:
标签: spring-boot hibernate kotlin spring-data-jpa hibernate-envers