Prezados,
Ao tentar gravar no um registro da entidade abaixo, obtenho o seguinte erro:
29709 [http-bio-8089-exec-3] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
Entidade que está sendo persistida:
public class Envolvido implements Serializable {
private static final long serialVersionUID = 2955125876671793107L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Basic(optional = false)
@Column(name = "SEQ_ENVONL_FISCAL_AF")
private Integer sequencia;
@JoinColumn(name = "SEQ_ACAO_FISCALIZATORIA", referencedColumnName = "SEQ_ACAO_FISCALIZATORIA")
@ManyToOne
private AcaoFiscalizatoria acaoFiscalizatoria;
...
Debugando vi que o erro está relacionado a entidade AcaoFiscalizatoria, que está mapeada da seguinte forma:
@Entity
@Table(name = "ACAO_FISCALIZATORIA")
@javax.persistence.SequenceGenerator(
name="SQ_ACAO_FISCALIZATORIA",
sequenceName="SQ_ACAO_FISCALIZATORIA"
)
public class AcaoFiscalizatoria implements Serializable {
private static final long serialVersionUID = 1126920011501549020L;
@Id
//@GeneratedValue(strategy = GenerationType.AUTO)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_ACAO_FISCALIZATORIA")
@Basic(optional = false)
@Column(name = "SEQ_ACAO_FISCALIZATORIA")
private Integer sequencia;
@OneToMany(mappedBy = "acaoFiscalizatoria")
private List<Envolvido> envolvidoList;
...
O identificador dessa entidade é o campo sequencia que é gerado por uma sequence no banco Oracle. Então quando grava uma AcaoFiscalizatoria armazeno a mesma no contexto da aplicação. Muitas outras tela precisam dos dados da AcaoFiscalizatoria. Quando vou gravar dados de outra tela, vi que a seguencia do objeto é diferente da sequencia gravada no BD… Muito estranho isso… Por exemplo se no banco foi gravada a sequencia 1145, no objeto o valor dela é 1144 . Daí quando vou salvar um objeto associado, ocorre o erro de ConstraintViolationException pois não existe esta chave no BD…
Alguém já passou por problema semelhante?