Estou com um problema aparentemente relacionado ao Hibernate Envers (auditoria) que afetou todo o projeto. Quando tenho um atributo do tipo coleção (List) vinculado através de uma JoinTable, persistido em modo cascata, e adiciono um item na lista, uma exceção é lançada ao persistir o objeto principal. Para listas com mapeamento bidirecional o objeto é persistido normalmente. Como o nome da tabela que consta na exceção termina com ‘AUD’, entendo que o erro está relacionado à auditoria.
Listas mapeadas desta forma não geram exceção:
public class Historico {
private Integer id;
private String descricao;
@ManyToOne
private Funcionario funcId;
}
private class Funcionario {
private Integer id;
private Integer nome;
@OneToMany(mappedBy = "funcId", cascade = CascadeType.ALL)
private List<Historico> historicos;
}
Já listas mapeadas assim geram a exeção:
public class Historico {
private Integer id;
private String descricao;
}
private class Funcionario {
private Integer id;
private Integer nome;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "FUNC_HISTORICO", joinColumns - @JoinColumn(name = "funcId"), inverseJoinColumns = @JoinColumn(name = "histId")
private List<Historico> historicos;
}
javax.persistence.EntityExistsException: a different object with the same identifier value was already associated with the session: [FUNC_HISTORICO_AUD#{funcId=438, histId=1473, REV=audit.RevInfo@61348500}]
Vale lembrar que estes id’s mostrados na exceção sempre são de algum item que já pertencia a lista, e não há nenhum tipo de manipulação sobre ele.