如何解决在 Spring Boot 中使用 Postload 审计 OneToOne 映射到 Envers Revision
我目前正在尝试在我的 Spring Boot 应用程序中实现一个版本系统。
客户提交了价值 300 美元的产品订单 -> 现在,如果我的客户将产品订单的价格更改为 350 美元,旧订单仍应显示 300 美元。
经过一些研究,我认为 Hibernate Envers 适合我的用例。
我尝试使用此示例 Mapping to an older revision of an entity with JPA annotations
应该很简单。在创建订单时,我保存了 productId 和产品的当前版本。 然后每次加载后我都会使用 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
这是否适用于我的用例,或者我应该看看不同的东西。
解决方法
如果您要保存订单,审计是一种糟糕的管理方式。价格应该是每个订单头寸,并且是域的固有部分。价格通常被复制或在折扣的情况下,有时甚至根据具体情况进行更改。 IMO 你应该明确地对此进行建模。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。