- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 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_name
和 fileName_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_strategy
和 physical_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/
我将 Hibernate Envers 与 @Audited( withModifiedFlag=true ) 结合使用,但遇到一个问题:为查询生成的 SQL 具有与 HBM2DDL< 生成的列名称不
我是一名优秀的程序员,十分优秀!