gpt4 book ai didi

java - Envers 查询对 _MOD 列使用错误的列名称

转载 作者:行者123 更新时间:2023-12-02 03:17:41 24 4
gpt4 key购买 nike

我将 Hibernate Envers 与 @Audited( withModifiedFlag=true ) 结合使用,但遇到一个问题:为查询生成的 SQL 具有与 HBM2DDL< 生成的列名称不同的列名称 _MOD 列工具

该问题可能与我重写 Hibernate 命名策略(如 here 中所述)有关。 。但是尝试调试这个时,我没有运气验证这个理论 - 命名策略似乎没有达到任何断点。

实体看起来像这样(省略了不相关的属性):

@Entity
@Table(name = "file")
@Audited(withModifiedFlag = true)
public class FileEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "file_name")
private String fileName;
}

生成的_AUD表如下所示:

CREATE TABLE file_AUD (
id int8 NOT NULL,
REV int4 NOT NULL,
REVTYPE int2,
REVEND int4,
file_name varchar(255),
fileName_MOD boolean,
PRIMARY KEY (id, REV)
);

我可以看到 file_namefileName_MOD 列之间的差异,但这似乎是预期的,如 here 中所述。

对实体进行更改或使用 AuditReaderFactory 进行查询时,显示以下 SQL 错误:

ERROR: column fileentity0_.file_name_mod does not exist
Hint: Perhaps you meant to reference the column "fileentity0_.filename_mod".

我正在使用 PostgreSQL 和 Hibernate 5.2.13.Final我知道有一种解决方法可以在每个属性上使用 modifiedColumnName,但上面的示例只是我尝试审核的众多实体之一,因此我正在寻找其他解决方案。

编辑:

深入研究 NamingStrategy,似乎代码实际上并未使用我添加的自定义代码。看来 Hibernate naming_strategy 属性被分为 implicit_naming_strategyphysical_naming_strategy ,并且随着项目中 Hibernate 版本的更新,这似乎没有被注意到。相反,这些属性由 Spring JPA 默认提供,如下所示:

hibernate.implicit_naming_strategy:org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
hibernate.physical_naming_strategy:org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

由于他们完成了这项工作(除了 Envers 问题之外),我不会使用自定义的。

我使用的查询示例:

AuditReader auditReader = AuditReaderFactory.get(entityManager);

AuditQuery auditQuery = auditReader.createQuery()
.forRevisionsOfEntity(FileEntity.class, false, true)
.addOrder(AuditEntity.revisionNumber().desc())
.setFirstResult((int) pageable.getOffset())
.setMaxResults(pageable.getPageSize());

最佳答案

理想的解决方案是扩展 spring-boot 实现并检查 identifeir 是否以 _MOD 后缀结尾,如果是,则让它返回相同的标识符而不更改它。然后配置 spring-boot 以使用自定义命名策略,并且无需重命名列即可正常工作。

关于java - Envers 查询对 _MOD 列使用错误的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56950660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com