Boa tarde Gujeanos.
Estou apanhando para um relacionamento entre 3 tabelas e gostaria da ajuda de vcs
public class Suino implements Serializable {
}
public class EventosSuino extends Persistente {
@OneToOne
@JoinColumn(name="idaprovacao")
private Inspecao aprovacao;
@OneToOne
@JoinColumn(name="idvenda")
private Venda venda;
@OneToOne
@JoinColumn(name="idsuino")
private Suino suino;
}
public class Venda {
@ManyToMany
@JoinTable(name="e33eventossuino",uniqueConstraints=@UniqueConstraint(columnNames="idsuino"),
joinColumns={@JoinColumn(name="idvenda",insertable=false,updatable=false)},
inverseJoinColumns={@JoinColumn(name="idsuino",insertable=false,updatable=false)})
public Set<Suino> getSuinos() {
return super.getSuinos();
}
}
Para cada suino existe um e somente um registro de eventosuino que armazena os eventos daquele suino(venda,inspeção).
O que acontece é que quando eu dou um insert(venda) o hibernate inseri a venda normalmente porém tenta inserir um novo registro de eventosuino devido ao mapeamento do @joinTable, ao inves de fazer o update no já existente, dando erro de chave duplicada.
O que eu preciso é que quando eu insira uma venda, o hibernate realize o update do eventosuino ao inves de tentar inserir, ou simplesmente ignore para que eu faça o update manualmente.
09/09/2011 14:38:32
INFO: Hibernate: insert into e33venda (dtevento, boletim, categoria, idcomprador, dtPrevisaoSaida, dtVenda, idgranjasaida, notaFiscal, pesoTotal, situacao, valorVenda) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
09/09/2011 14:38:33
INFO: Hibernate: update e33venda set dtevento=?, boletim=?, categoria=?, idcomprador=?, dtPrevisaoSaida=?, dtVenda=?, idgranjasaida=?, notaFiscal=?, pesoTotal=?, situacao=?, valorVenda=? where id=?
09/09/2011 14:38:33
INFO: Hibernate: insert into e33eventossuino (idvenda, idsuino) values (?, ?)
SEVERE: 8380 [http-thread-pool-8080(1)] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1062, SQLState: 23000
09/09/2011 14:38:33
SEVERE: 8381 [http-thread-pool-8080(1)] ERROR org.hibernate.util.JDBCExceptionReporter - Duplicate entry '136674' for key 'idsuino'
Caused by: java.sql.BatchUpdateException: Duplicate entry '136674' for key 'idsuino'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2024)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1449)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 51 more