Olá Pessoal,
Estou tendo problemas para auditar minhas entidades. Nelas tenho as anotações @PostPersist / @PostUpdate / @PostRemove, aonde eu informo alguns valores e tento salvar em uma tabela de log, porem da erro. Ele passa pelo metodo de insercao da entidade e não chega nem a entrar no metodo de insercao do LOG.
Data Erro tanto colocando o insert na anotação quando mesmo criando um metodo para auxiliar tambem da erro.
Utilizo na minha aplicação JSF, RichFaces, Spring, JPA.
Entidade:
@Entity
@Table(name = "teste")
@NamedQueries({
@NamedQuery(name = "Teste.findAll", query = "FROM Teste c")
})
public class Teste implements Serializable {
@Id
@SequenceGenerator( name = "ID", sequenceName = "SEQ_GERAL", allocationSize = 1 )
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "ID" )
@Basic(optional = false)
@Column(name = "cod_teste")
private Long codTeste;
@Basic(optional = false)
@Column(name = "des_teste")
private String desTeste;
@Type(type = "statusEnumType")
@Column(name = "status")
private StatusEnum status;
@Transient
private Long codEntity = 10L;
@Transient
@Resource(name = "logDAO")
private static LogDaoJpa logDao;
public Teste() {
}
public Teste(Long codTeste) {
this.codTeste = codTeste;
}
public Long getCodTeste() {
return codTeste;
}
public void setCodTeste(Long codTeste) {
this.codTeste = codTeste;
}
public String getDesTeste() {
return desTeste;
}
public void setDesTeste(String desTeste) {
this.desTeste = desTeste;
}
public StatusEnum getStatus() {
return status;
}
public void setStatus(StatusEnum status) {
this.status = status;
}
public Long getCodEntity() {
return codEntity;
}
public void setCodEntity(Long codEntity) {
this.codEntity = codEntity;
}
@PostPersist >> ERRO <<
public void onPostInsert(){
Log log = new Log();
log.setEntidade(getCodEntity());
log.setRegistro(getCodCor().toString());
log.setAcao("INSERT");
log.setUsuario(Util.getUsuario().getIdUsu());
log.setData(new Date());
logDao.store(log);
}
@PostUpdate >> ERRO <<
public void onPostUpdate(){
Util.gravaLog(getCodEntity(), getCodEntity(), getCodCor().toString(), "UPDATE");
}
@PostRemove >> ERRO <<
public void onPostDelete(){
Util.gravaLog(getCodEntity(), getCodEntity(), getCodCor().toString(), "DELETE");
}
@Override
public int hashCode() {
int hash = 0;
hash += (codCor != null ? codTeste.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Cores)) {
return false;
}
Testeother = (Teste) object;
if ((this.codTeste == null && other.codTeste != null) || (this.codCor != null && !this.codTeste.equals(other.codTeste))) {
return false;
}
return true;
}
}
Erro:
12:16:13,296 ERROR [application] org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while commiting the transaction
javax.faces.el.EvaluationException: org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while commiting the transaction
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at br.com.caras.isca.listener.ExceptionHandler.processAction(ExceptionHandler.java:16)
at javax.faces.component.UICommand.broadcast(UICommand.java:387)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
Alguem tem alguma ideia ?
Obrigado,
Rodrigo