I can't get cascading persist working on my entities which have the following
mappings.
TblScmpdt.java //Parent
@OneToMany(fetch =
FetchType.LAZY,mappedBy="tblScmpdt",cascade={CascadeType.MERGE,CascadeType.REMOVE})
private Collection<TblPdtbnf> tblPdtbnfs = new ArrayList<TblPdtbnf>();
TblPdtbnf.java //Child
@Id
@Column(name = "PDTBNF_ID",nullable=false)
private Integer pdtbnfId; //Foreign key to TblPdtbnfcde.java
@Id
@Column(name = "SCMPDT_ID",nullable=false)
private Integer scmpdtId; //Foreign key to TblScmpdt.java
@ManyToOne(fetch = FetchType.LAZY,cascade=CascadeType.MERGE)
@JoinColumn(name = "SCMPDT_ID",referencedColumnName="SCMPDT_ID")
private TblScmpdt tblScmpdt;
--------------------------------------
Here's the test code:
em.getTransaction().begin();
TblScmpdt tblScmpdt = new TblScmpdt();
tblScmpdt.setAdmsysCde("EBSTA");
tblScmpdt.setFndCde("1526");
tblScmpdt.setGccCde("A1526");
tblScmpdt.setPflcmnDte(new Date());
TblPdtcde tblPdtcde = em.getReference(TblPdtcde.class,
new Integer(121));
TblPdtbnfcde tblPdtbnfcde =
em.getReference(TblPdtbnfcde.class, new
Integer(13));
tblScmpdt.setPdtcdeId(tblPdtcde.getPdtcdeId());
TblPdtbnf tblPdtbnf = new TblPdtbnf();
tblPdtbnf.setCmnDte(new Date());
tblPdtbnf.setPdtbnfId(tblPdtbnfcde.getPdtbnfId());
tblPdtbnf.setTblScmpdt(tblScmpdt);
tblScmpdt.addTblPdtbnf(tblPdtbnf);
// tblScmpdt.getTblPdtbnfs().add(tblPdtbnf);
tblScmpdt = em.merge(tblScmpdt);
em.getTransaction().commit();
----------------------------------
The exception:
Caused by: <openjpa-1.0.0-r420667:568756 fatal user error>
org.apache.openjpa.persistence.InvalidStateException: Attempt to set column
"TBL_PDTBNF.SCMPDT_ID" to two different values: (null)"null", (class
java.lang.Integer)"700" This can occur when you fail to set both sides of a
two-sided relation between objects, or when you map different fields to the
same column, but you do not keep the values of these fields in synch.
at org.apache.openjpa.jdbc.sql.PrimaryRow.setObject(PrimaryRow.java:338)
at org.apache.openjpa.jdbc.sql.RowImpl.flushJoinValues(RowImpl.java:289)
at org.apache.openjpa.jdbc.sql.RowImpl.flushForeignKey(RowImpl.java:222)
at org.apache.openjpa.jdbc.sql.RowImpl.setForeignKey(RowImpl.java:197)
at
org.apache.openjpa.jdbc.sql.PrimaryRow.setForeignKey(PrimaryRow.java:172)
at
org.apache.openjpa.jdbc.meta.ValueMappingImpl.setForeignKey(ValueMappingImpl.java:317)
at
org.apache.openjpa.jdbc.meta.FieldMapping.setForeignKey(FieldMapping.java:966)
at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.insert(RelationFieldStrategy.java:207)
at
org.apache.openjpa.jdbc.meta.FieldMapping.insert(FieldMapping.java:555)
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.insert(AbstractUpdateManager.java:203)
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:145)
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:85)
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
at
org.apache.openjpa.datacache.DataCacheStoreManager.flush(DataCacheStoreManager.java:544)
at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
... 9 more
--
View this message in context:
http://www.nabble.com/%40OneToMany-%40ManyToOne%2C-Bidirectional%2C-Composite-Key-tp17801245p17801245.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.