当前不支持公式映射 - Hibernate ORM Envers
Posted
技术标签:
【中文标题】当前不支持公式映射 - Hibernate ORM Envers【英文标题】:Formula mappings are currently not supported - Hibernate ORM Envers 【发布时间】:2017-11-03 19:15:50 【问题描述】:我使用 Hibernate Envers:
@Entity
@Table(name = "user")
@Audited
class User()
private String id;
@Formula("(SELECT name FROM other c where c.id = id)")
private Integer name;
它抛出:
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: 调用 init 方法失败;嵌套异常是 org.hibernate.envers.configuration.internal.metadata.FormulaNotSupportedException: 公式映射(除了@DiscriminatorValue)目前不是 支持
如何使用@Formula 和 Hibernate Envers 计算实体属性?
仅供参考,当我删除 Hibernate Envers 时,它可以正常工作。
【问题讨论】:
【参考方案1】:问题是您要求 Envers 审核 @Formula
带注释的列,目前不支持该列。我打开 JIRA HHH-11785 的唯一目的是为了进一步研究。
但是,您应该能够使用 @NotAudited
注释公式字段,并且 Envers 应该可以很好地与该配置集成。真正的问题是,当它发现要跟踪基于公式的字段的历史时,它会失败。
举个例子:
@Entity
@Audited
class User
@Formula("SELECT name FROM Other ...")
@NotAudited
private String name;
// other attributes
【讨论】:
您的代码给我:h.engine.jdbc.spi.SqlExceptionHelper:“字段列表”嵌套异常中的未知列“user0_.name”是 javax.persistence.PersistenceException:org.hibernate.exception。 SQLGrammarException: 无法提取 ResultSet] 您确认您的公式有效吗?我向您建议的唯一代码是将字段标记为未审核,以便 Envers 继续通过您的失败点。我需要更多详细信息来进一步提供帮助,但这听起来像是正在执行一些无效查询。 你的例子不起作用,我添加了这样的括号:@Formula("(SELECT name FROM Other ...)") 现在它起作用了 如果您必须将语句包装在(
和 )
中,那么这是一个错误。您不必包装 @Formula
注释。我也会在 JIRA 中添加一条关于对此进行调查的说明。
如果您可以将不带括号的错误堆栈跟踪添加到提到的 JIRA 中的注释中,那将非常有帮助。以上是关于当前不支持公式映射 - Hibernate ORM Envers的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate ORM - 实体属性支持 Java 1.8 Optional
ORM简介 && MyBatis和Hibernate的不同 && 动态代理简单实现Mybatis基本使用