有没有办法将 Hibernate Envers 与自定义查询一起使用

问题描述 投票:0回答:1

我想问是否有一种方法可以使用自定义查询来查找修订的实体。 原因是我想完全控制我的实体何时加载,有时我还有一些更复杂的连接,这些连接不太容易反映

以下是我的(示例)实体:

@Data
@Entity
@Audited
@Table(name = "Product")
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private BigDecimal price;
    private Long orderId;
    @ManyToOne
    @JoinColumn(name = "ORDER_ID", insertable = false, updatable = false)
    private Order order;
}
@Data
@Entity
@Audited
@Table(name = "Order")
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String text;
    private BigDecimal amount;

}

我想做这样的事情

    public void findProductByOrderIdAndRevision(Long orderId, Long revisionFromOrder) {
AuditReader auditReader = AuditReaderFactory.get(entityManager);

return auditReader.createQuery().forEntitiesAtRevision(Product.class, revisionFromOrder)
        .traverseRelation("order", JoinType.INNER, "products", AuditEntity.id().eq(orderId))
        .getResultList();
    }

但这也会返回旧值,这些值在本次修订时不存在于关系中

有什么可能的方法来实现这一目标吗?

致以诚挚的问候

java hibernate hibernate-envers
1个回答
0
投票

(我真的不明白为什么你的查询会返回错误的结果,也许你可以查看可以使用

org.hibernate.sql: INFO
记录的实际SQL)

否则,您实际上可以使用 envers 实体编写 HQL 查询(envers 也在内部执行此操作) 命名约定类似于

"com.example.Product_AUD"
,关系表的命名就像数据库表一样。 有关底层模型的更多信息,您可以查看
EnversService#getEntitiesConfigurations

至少这就是我对更复杂的查询所做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.