2017-06-02 63 views
2

我使用Hibernate Envers:公式映射目前不支持 - Hibernate的ORM Envers

@Entity 
@Table(name = "user") 
@Audited 
class User() 
{ 
    private String id; 
    @Formula("(SELECT name FROM other c where c.id = id)") 
    private Integer name; 
} 

它拋出:

[組織/ springframework的的/ boot /自動配置/ ORM/JPA/HibernateJpaAutoConfiguration.class ]: 調用init方法失敗;嵌套的例外是 org.hibernate.envers.configuration.internal.metadata.FormulaNotSupportedException: 式映射(除了@DiscriminatorValue)目前不支持 與@Formula和Hibernate Envers

如何計算實體屬性?

僅供參考當我刪除休眠Envers它正常工作。

回答

4

問題是您要求Envers審覈@Formula註釋列,目前不支持該列。我已打開JIRA HHH-11785,目的只是爲了更深入地研究。

但是,您應該能夠使用@NotAudited註釋公式字段,並且Envers應該可以很好地與該配置集成。真正的問題是,當它發現基於公式的字段的歷史記錄被跟蹤時它會失敗。

舉個例子:

@Entity 
@Audited 
class User { 
    @Formula("SELECT name FROM Other ...") 
    @NotAudited 
    private String name; 
    // other attributes 
} 
+0

你的代碼給我:h.engine.jdbc.spi.SqlExceptionHelper:未知列在 '字段列表' user0_.name「嵌套的例外是javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException:無法提取ResultSet] – user3871754

+0

您是否驗證了您的公式是有效的?我建議給你的唯一代碼是標記該領域未被審計,以便Envers繼續超越你的失敗點。我需要更多的細節來幫助進一步,但它可能聽起來像一些無效的查詢正在執行。 – Naros

+0

你的例子不起作用,我添加了這樣的括號:@Formula(「(SELECT name FROM Other ...)」),現在它工作 – user3871754