Oi Pessoal,
Seguinte, eu tenho algumas tabelas com composite-id, e as vezes, quando eu dou um saveOrUpdate(<pojo>), eu recebo uma excessão dizendo que não acha a linha e por isso não dá INSERT, DELETE ou UPDATE
SEVERE: Could not synchronize database state with session
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:688)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:641)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2382)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2336)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2204)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at com.ibm.shop_br_readytobuy.bid.migrar.MigrarBid.main(MigrarBid.java:116)
Este problema só acontece se o dado vai ser inserido, se ele vai ser atualizado ele dá certo.
Eu dei uma pesquisada e achei duas coisas, um fala para por o unsaved-value
no mapeamento.
Outro falou para usar o método .isUnsaved() da interface Interceptor. Mas pelo que eu li, este método .isUnsaved() é usado pelo método .saveOrUpdate() do Session. E não achei a classe que implementa o .isUnsaved().
Então, pergunta, como dou um saveOrUpdate() em um POJO que tem composite-id ??
Obrigado