使用审计注释后的休眠序列冲突

时间:2017-04-02 12:41:59

标签: spring hibernate hibernate-envers

我在Spring启动应用程序中使用了hibernate 我的域名模型就像这样

@Entity
@Table(name = "skill")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "skill")
@Audited
public class Skill implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;
}

序列的增量大小为50并且正常工作 但是当我添加Envers Audited注释时,我看到了这个错误

  

'增量大小'的冲突值。找到[50]和[1]

如何解决此冲突?

1 个答案:

答案 0 :(得分:0)

这听起来不像是Envers问题,而是一般的映射问题。

当您添加@Audited注释时,它只是告知Envers它应该在Hibernate引导期间检查该特定实体映射,并创建必要的审计对象以在每次事务期间存储实体状态。

生成的Envers对象使用自己的序列生成器和主键。用户定义的生成策略,序列等都在Envers对象中被忽略,因为关联列只是一个复制/传递值,没什么特别的。

换句话说,Envers表将定义一个反映此POJO的PK:

@Embeddable
public class EnversSkillId implements Serializable {
  @Column(name = "REV", nullable = false, updatable = false)
  private Integer rev;
  @Column(name = "id", nullable = false, updatable = false)
  private Long id;
}

当Envers生成审核记录时,它会自动使用其内部序列生成器获取下一个值并将其分配给EnversSkillId#rev并将实体的id值直接复制到EnversSkillId#id属性中

正如评论中所提到的,您的问题与Envers相关的可能性很小。