Tenho uma entidade Cliente que pode ter um vendedor ou não, de qualquer maneira quando não houver vendedor o código será zero.
O que acontece é que se eu coloco cascade = CascadeType.PERSIST ele vai inserir um vendedor no cadastro, eu preciso apenas que ele salve o código do vendedor na coluna CODIGO_VENDEDOR, por outro lado se não coloco cascade = CascadeType.PERSIST ele dá a seguinte exceção:
[TopLink Warning]: 2009.12.29 04:55:36.718--UnitOfWork(31979889)--java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: class horus.bean.Vendedor.
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork$1.iterate(RepeatableWriteUnitOfWork.java:140)
at oracle.toplink.essentials.internal.descriptors.DescriptorIterator.internalIterateReferenceObject(DescriptorIterator.java:189)
at oracle.toplink.essentials.internal.descriptors.DescriptorIterator.iterateReferenceObjectForMapping(DescriptorIterator.java:296)
at oracle.toplink.essentials.mappings.ObjectReferenceMapping.iterateOnRealAttributeValue(ObjectReferenceMapping.java:269)
at oracle.toplink.essentials.internal.indirection.IndirectionPolicy.iterateOnAttributeValue(IndirectionPolicy.java:222)
at oracle.toplink.essentials.mappings.ForeignReferenceMapping.iterate(ForeignReferenceMapping.java:587)
at oracle.toplink.essentials.internal.descriptors.ObjectBuilder.iterate(ObjectBuilder.java:2099)
at oracle.toplink.essentials.internal.descriptors.DescriptorIterator.iterateReferenceObjects(DescriptorIterator.java:311)
at oracle.toplink.essentials.internal.descriptors.DescriptorIterator.startIterationOn(DescriptorIterator.java:484)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.discoverUnregisteredNewObjects(RepeatableWriteUnitOfWork.java:161)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.discoverAllUnregisteredNewObjects(UnitOfWorkImpl.java:1292)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.assignSequenceNumbers(UnitOfWorkImpl.java:382)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.collectAndPrepareObjectsForCommit(UnitOfWorkImpl.java:721)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1112)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:107)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:856)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:102)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60)
at horus.dao.ClienteDAO.inserir(ClienteDAO.java:28)
Entidade Cliente.java:
...
@ManyToOne(optional = true) //(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "CODIGO_VENDEDOR", nullable = false, updatable = true)
public Vendedor getVendedor() {
return vendedor;
}
Como resolvo isso?