Hi, Eli, In case you did not receive this mail. Please let me know if you have further question. Thanks!
Regards, Fay --- On Fri, 11/21/08, Fay Wang <[EMAIL PROTECTED]> wrote: > From: Fay Wang <[EMAIL PROTECTED]> > Subject: Re: @OneToMany/@ManyToOne, Bidirectional, Composite Key > To: users@openjpa.apache.org > Date: Friday, November 21, 2008, 8:55 AM > Hi, Eli, > > The following are my modification of your codes and my test > case. Note that I get rid of your AssignedActivityPk. The > insert is working fine. Hope this help! > > Regards, > Fay > > ===================================== > > @Entity > @Table (name="PROJECT_ACTIVITIES") > @SequenceGenerator(name = "SEQ_PACT_ID", > sequenceName = "SEQ_PACT_ID", > allocationSize = 1) > public class Activity implements Serializable { > @Id > @Column(name="PACT_ID", nullable=false) > @GeneratedValue(strategy = GenerationType.SEQUENCE, > generator = "SEQ_PACT_ID") > private Integer id = null; > > @Column(name="PACT_DESC") > private String desc = null; > > @OneToMany (mappedBy="activity", fetch = > FetchType.LAZY, > cascade={CascadeType.ALL}) > private Set<AssignedActivity> assignedTo = > new HashSet<AssignedActivity>(); > ... > } > > ============================================== > @Entity > @Table(name = "ASSIGNED_ACTIVITIES") > public class AssignedActivity implements Serializable{ > @Id > @Column (name = "CONS_ID", nullable=false) > private Integer consId; > > @Column (name = "TYPE") > private Integer type; > > @Column (name = "ASG_EST_TIME") > private Integer asgEstTime; > > @ManyToOne > @JoinColumn (name = "PACT_ID", > nullable=false) > @ForeignKey > private Activity activity; > > .... > } > =================================== > The test case: > EntityTransaction tran = em.getTransaction(); > > Activity a = new Activity(); > a.setDesc("This is a1"); > > AssignedActivity aa = new AssignedActivity(); > aa.setConsId(1); > aa.setAsgEstTime(1); > aa.setType(1); > aa.setActivity(a); > a.addAssignedTo(aa); > > AssignedActivity aa2 = new AssignedActivity(); > aa2.setConsId(2); > aa2.setAsgEstTime(2); > aa2.setType(2); > aa2.setActivity(a); > a.addAssignedTo(aa2); > > tran.begin(); > em.persist(a); > em.persist(aa); > em.persist(aa2); > tran.commit(); > em.close(); > > > > > > > --- On Thu, 11/20/08, piltrafeta > <[EMAIL PROTECTED]> wrote: > > > From: piltrafeta <[EMAIL PROTECTED]> > > Subject: Re: @OneToMany/@ManyToOne, Bidirectional, > Composite Key > > To: users@openjpa.apache.org > > Date: Thursday, November 20, 2008, 12:24 PM > > Hi Fay! > > > > Thank you for your explanation, it's exactly what > i > > want to do. But i don't > > know exactly how to set pactId as Foreign Key.. > > Now i'm having the exception that pact_id could > not be > > NULL, so pactId it's > > not being setted.. > > My code is: > > > > @Entity > > @Table (name="PROJECT_ACTIVITIES") > > @SequenceGenerator(name = "SEQ_PACT_ID", > > sequenceName = "SEQ_PACT_ID", > > allocationSize = 1) > > public class Activity implements IsSerializable{ > > @Id > > @Column(name="PACT_ID", nullable=false) > > @GeneratedValue(strategy = > GenerationType.SEQUENCE, > > generator = > > "SEQ_PACT_ID") > > private Integer id = null; > > @Column(name="PACT_DESC") > > private String desc = null; > > > > @OneToMany (mappedBy="activity", fetch = > > FetchType.LAZY) > > @JoinColumn (name = "PACT_ID", nullable > = > > false)//, insertable = false, > > updatable = false) > > > @Cascade({CascadeType.ALL,CascadeType.DELETE_ORPHAN}) > > private Set<AssignedActivity> assignedTo = > new > > HashSet<AssignedActivity>(); > > ..} > > > > @Entity > > @Table(name = "ASSIGNED_ACTIVITIES") > > public class AssignedActivity implements > IsSerializable { > > @Id > > @Column (name = "CONS_ID", > nullable=false) > > private Integer consId; > > > > @Column (name = "PACT_ID", > nullable=false) > > private Integer pactId; > > > > @ManyToOne > > @JoinColumn (name = "PACT_ID", > > referencedColumnName = "PACT_ID", > > nullable=false, insertable = false, > > updatable = false) > > private Activity activity = new Activity(); > > ..} > > > > > > Thank you very much for your help! > > Regards, > > Eli > > > > On Wed, Nov 19, 2008 at 7:05 PM, Fay Wang (via Nabble) > < > > > [EMAIL PROTECTED]<[EMAIL PROTECTED]> > > > wrote: > > > > > Hi, Eli, > > > It seems that you want to have pactId as a > primary > > key and join column > > > in the assigned_activities (child) table, and you > want > > the pactId > > > automatically generated in the project_activities > > (parent) table to fill in > > > the pactId column (it is a primary key column) in > the > > child table. I got the > > > following error when trying to persist an > Activity > > entity with two > > > AssignedActivity objects to the database because > > PACT_ID column is both a > > > primary key column and a foreign key column: > > > > > > <openjpa-0.0.0-rnull fatal user error> > > > org.apache.openjpa.util.InvalidStateException: > Attempt > > to set column > > > "ASSIGNED_ACTIVITIES.PACT_ID" to two > > different values: (class > > > java.lang.Integer)"0", (class > > java.lang.Integer)"7" 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. > > > > > > > > > The workaround is not to use IdClass. Instead, to > have > > consId alone as the > > > primary key in the child table and pactId as the > join > > column (foreign key > > > column) in the child table. Hope this is helpful. > > > > > > Fay > > > > > > > > > --- On Wed, 11/19/08, piltrafeta > > > <[EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=0>> > > > wrote: > > > > > > > From: piltrafeta > > > <[EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=1>> > > > > > > > Subject: Re: @OneToMany/@ManyToOne, > > Bidirectional, Composite Key > > > > To: > > > [EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=2> > > > > Date: Wednesday, November 19, 2008, 9:38 AM > > > > Hi Fay, > > > > I've done the modification you told me > but > > it's > > > > still not working... when i > > > > insert new registers the pactId from > > assignedActivities > > > > remains null. > > > > > > > > I copy the class activity with the > modification: > > > > > > > > @Entity > > > > @Table (name="PROJECT_ACTIVITIES") > > > > @SequenceGenerator(name = > > "SEQ_PACT_ID", > > > > sequenceName = "SEQ_PACT_ID", > > > > allocationSize = 1) > > > > public class Activity implements > IsSerializable{ > > > > @Id > > > > @Column(name="PACT_ID", > nullable=false) > > > > @GeneratedValue(strategy = > > GenerationType.SEQUENCE, > > > > generator = > > > > "SEQ_PACT_ID") > > > > private Integer id = null; > > > > @Column(name="PACT_DESC") > > > > private String desc = null; > > > > @Column (name ="STATE") > > > > private Integer state = null; > > > > > > > > @Column (name ="PROJ_ID") > > > > private Integer idProject = null; > > > > > > > > @Column (name ="PACT_DUE_DATE") > > > > private Date dueDate = null; > > > > > > > > @OneToMany (mappedBy="activity", > fetch > > = > > > > FetchType.LAZY) > > > > @JoinColumn (name = "PACT_ID", > nullable > > = false) > > > > > > @Cascade({CascadeType.ALL,CascadeType.DELETE_ORPHAN}) > > > > private Set<AssignedActivity> > assignedTo = > > new > > > > HashSet<AssignedActivity>(); > > > > ..} > > > > > > > > Regards, > > > > Eli > > > > > > > > > > > > Fay Wang wrote: > > > > > > > > > > Hi, > > > > > In your test case, you have > OneToMany > > relation from > > > > Activity to > > > > > AssignedActivity. The mappedBy > attribute in > > the > > > > OneToMany relation should > > > > > be the name of the many-to-one field in > the > > related > > > > entity that maps this > > > > > bidirectional relation. Could you > change > > mappedBy to > > > > "activity" and try > > > > > again? > > > > > > > > > > Regards, > > > > > Fay > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --- On Tue, 11/18/08, piltrafeta > > > > > > > <[EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=3>> > > > wrote: > > > > > > > > > >> From: piltrafeta > > > <[EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=4>> > > > > > > > >> Subject: Re: @OneToMany/@ManyToOne, > > Bidirectional, > > > > Composite Key > > > > >> To: > > > [EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=5> > > > > >> Date: Tuesday, November 18, 2008, > 11:56 > > AM > > > > >> Hi! > > > > >> I'm having a similar problem > for a > > while, > > > > maybe you can > > > > >> help me... > > > > >> My classes are like this : > > > > >> > > > > >> @Entity > > > > >> @Table(name = > > "ASSIGNED_ACTIVITIES") > > > > >> @IdClass(AssignedActivityPk.class) > > > > >> public class AssignedActivity > implements > > > > IsSerializable { > > > > >> @Id > > > > >> @Column (name = > "CONS_ID", > > > > nullable=false) > > > > >> private Integer consId; > > > > >> @Id > > > > >> @Column (name = > "PACT_ID", > > > > nullable=false) > > > > >> private Integer pactId; > > > > >> @Column (name = "TYPE") > > > > >> private Integer type; > > > > >> @Column (name = > > "ASG_EST_TIME") > > > > >> private Integer asgEstTime; > > > > >> @ManyToOne > > > > >> @JoinColumn (name = > "PACT_ID", > > > > nullable=false, > > > > >> insertable = false, updatable = > false) > > > > >> private Activity activity; > > > > >> ...} > > > > >> > > > > >> @Embeddable > > > > >> public class AssignedActivityPk > > implements > > > > Serializable { > > > > >> @Id > > > > >> @Column (name = > "CONS_ID", > > > > nullable=false) > > > > >> private Integer consId; > > > > >> @Id > > > > >> @Column (name = > "PACT_ID", > > > > nullable=false) > > > > >> private Integer pactId; > > > > >> ...} > > > > >> > > > > >> @Entity > > > > >> @Table > > (name="PROJECT_ACTIVITIES") > > > > >> @SequenceGenerator(name = > > "SEQ_PACT_ID", > > > > >> sequenceName = > "SEQ_PACT_ID", > > > > >> allocationSize = 1) > > > > >> public class Activity implements > > IsSerializable{ > > > > >> @Id > > > > >> @Column(name="PACT_ID", > > nullable=false) > > > > >> @GeneratedValue(strategy = > > > > GenerationType.SEQUENCE, > > > > >> generator = > > > > >> "SEQ_PACT_ID") > > > > >> private Integer id = null; > > > > >> @Column(name="PACT_DESC") > > > > >> private String desc = null; > > > > >> > > > > >> @OneToMany > (mappedBy="pactId", > > fetch = > > > > >> FetchType.LAZY) > > > > >> @JoinColumn (name = > "PACT_ID", > > nullable > > > > = false) > > > > >> > > > > > > @Cascade({CascadeType.ALL,CascadeType.DELETE_ORPHAN}) > > > > >> private Set<AssignedActivity> > > assignedTo = > > > > new > > > > >> HashSet<AssignedActivity>(); > > > > >> > > > > >> ...} > > > > >> > > > > >> As the id from the parent class > > (Activity) is > > > > generated by > > > > >> a sequence from > > > > >> the database, when I'm trying > to > > insert a new > > > > Activity, > > > > >> the record for > > > > >> parent object is correct (the id is > > generated) but > > > > not for > > > > >> the child > > > > >> (AssignedActivity). So i've the > > child inserted > > > > but > > > > >> width the pact_id = null. > > > > >> > > > > >> Have you got any idea of which is > the > > problem?? > > > > >> Thanks ! > > > > >> > > > > >> > > > > >> > > > > >> Fay Wang wrote: > > > > >> > > > > > >> > Hmmm. Here is my test case and > it > > works fine. > > > > Four > > > > >> classes are listed: > > > > >> > (1) TblPdtbnf0.java > > > > >> > (2) TblPdtbnfId.java > > > > >> > (3) TblScmpdt0.java > > > > >> > (4) Test0.java > > > > >> > > > > > >> > You might still want to try > it? > > :=)) > > > > >> > > > > > >> > -f > > > > >> > > > > > >> > > > > > > > ==================================================== > > > > >> > (1) TblPdtbnf0.java > > > > >> > > > > > >> > package insert; > > > > >> > > > > > >> > import > > javax.persistence.CascadeType; > > > > >> > import > javax.persistence.Column; > > > > >> > import > javax.persistence.Entity; > > > > >> > import > javax.persistence.FetchType; > > > > >> > import javax.persistence.Id; > > > > >> > import > javax.persistence.IdClass; > > > > >> > import > > javax.persistence.JoinColumn; > > > > >> > import > javax.persistence.ManyToOne; > > > > >> > > > > > >> > @Entity > > > > >> > @IdClass(TblPdtbnfId.class) > > > > >> > public class TblPdtbnf0 { > > > > >> > @Id > > > > >> > @Column(name = > > "PDTBNF_ID", > > > > nullable = > > > > >> false) > > > > >> > private Integer pdtbnfId; > > > > >> > > > > > >> > @Id > > > > >> > @Column(name = > > "SCMPDT_ID", > > > > nullable = > > > > >> false) > > > > >> > private Integer scmpdtId; > > > > >> > > > > > >> > @ManyToOne(fetch = > > FetchType.LAZY, > > > > cascade = > > > > >> CascadeType.MERGE) > > > > >> > @JoinColumn(name = > > "XYZ_ID", > > > > >> referencedColumnName = > > "SCMPDT_ID") > > > > >> > private TblScmpdt0 > tblScmpdt; > > > > >> > > > > > >> > public Integer > getPdtbnfId() { > > > > >> > return pdtbnfId; > > > > >> > } > > > > >> > > > > > >> > public void > setPdtbnfId(Integer > > pdtbnfId) > > > > { > > > > >> > this.pdtbnfId = > pdtbnfId; > > > > >> > } > > > > >> > > > > > >> > public Integer > getScmpdtId() { > > > > >> > return scmpdtId; > > > > >> > } > > > > >> > > > > > >> > public TblScmpdt0 > > getTblScmpdt() { > > > > >> > return tblScmpdt; > > > > >> > } > > > > >> > > > > > >> > public void > > setTblScmpdt(TblScmpdt0 > > > > tblScmpdt) { > > > > >> > this.tblScmpdt = > tblScmpdt; > > > > >> > this.scmpdtId = > > > > tblScmpdt.getScmpdtId(); > > > > >> > } > > > > >> > } > > > > >> > > > > > >> > > > > > > > ============================================================= > > > > >> > (2)TblPdtbnfId.java > > > > >> > > > > > >> > package insert; > > > > >> > > > > > >> > import java.io.Serializable; > > > > >> > > > > > >> > public class TblPdtbnfId > implements > > > > Serializable{ > > > > >> > private Integer pdtbnfId; > > > > >> > private Integer scmpdtId; > > > > >> > > > > > >> > public TblPdtbnfId(){} > > > > >> > public TblPdtbnfId(Integer > > pdtbnfId, > > > > Integer > > > > >> scmpdtId) { > > > > >> > this.pdtbnfId = > pdtbnfId; > > > > >> > this.scmpdtId = > scmpdtId; > > > > >> > } > > > > >> > > > > > >> > public Integer > getScmpdtId() { > > > > >> > return scmpdtId; > > > > >> > } > > > > >> > > > > > >> > public Integer > getPdtbnfId() { > > > > >> > return pdtbnfId; > > > > >> > } > > > > >> > > > > > >> > public boolean > equals(Object o) > > { > > > > >> > return (o instanceof > > TblPdtbnfId) > > > > && > > > > >> > pdtbnfId.intValue() == > > > > >> > > ((TblPdtbnfId)o).getPdtbnfId().intValue() > > > > && > > > > >> > scmpdtId.intValue() == > > > > >> > > ((TblPdtbnfId)o).getScmpdtId().intValue(); > > > > >> > } > > > > >> > > > > > >> > public int hashCode() { > > > > >> > int hc = 0; > > > > >> > if (pdtbnfId != null) > hc = > > hc + > > > > >> pdtbnfId.hashCode(); > > > > >> > if (scmpdtId != null) > hc = > > hc + > > > > >> scmpdtId.hashCode(); > > > > >> > return hc; > > > > >> > } > > > > >> > } > > > > >> > > > > > >> > > > > > > ============================================== > > > > >> > (3)TblScmpdt0.java > > > > >> > > > > > >> > package insert; > > > > >> > import java.util.ArrayList; > > > > >> > import java.util.Collection; > > > > >> > > > > > >> > import > > javax.persistence.CascadeType; > > > > >> > import > javax.persistence.Column; > > > > >> > import > javax.persistence.Entity; > > > > >> > import > javax.persistence.FetchType; > > > > >> > import > > javax.persistence.GeneratedValue; > > > > >> > import > > javax.persistence.GenerationType; > > > > >> > import javax.persistence.Id; > > > > >> > import > > javax.persistence.JoinColumn; > > > > >> > import > > javax.persistence.JoinColumns; > > > > >> > import > javax.persistence.OneToMany; > > > > >> > import > javax.persistence.OneToOne; > > > > >> > import > > javax.persistence.TableGenerator; > > > > >> > > > > > >> > @Entity > > > > >> > public class TblScmpdt0 { > > > > >> > > > > > >> > > > > > >> > > > > > > > > > > @TableGenerator(name="baseGenerator",schema="EBSTATUS",table="TBL_KEYGEN", > > > > >> > > > > > >> > > pkColumnName="PRIMARY_KEY_COLUMN", > > > > >> > > > > > >> > > valueColumnName="LAST_USED_ID", > > > > >> > > > > > >> > > > > > > > pkColumnValue="TBL_SCMPDT_ID",allocationSize=100) > > > > >> > @Id > > > > >> > > > > > >> > > > > > > > @GeneratedValue(strategy=GenerationType.TABLE,generator="baseGenerator") > > > > >> > @Column(name = > > > > "SCMPDT_ID",nullable=false) > > > > >> > private Integer scmpdtId; > > > > >> > > > > > >> > @OneToMany(fetch = > FetchType.LAZY, > > > > >> > > > mappedBy="tblScmpdt", > > > > >> > > > > > >> > > cascade={CascadeType.MERGE,CascadeType.REMOVE, > > > > >> > > > CascadeType.PERSIST}) > > > > >> > private > > Collection<TblPdtbnf0> > > > > tblPdtbnfs = new > > > > >> ArrayList<TblPdtbnf0>(); > > > > >> > > > > > >> > private String admsysCde; > > > > >> > private String fndCde; > > > > >> > private String gccCde; > > > > >> > > > > > >> > public Collection > getTblPdtbnfs() { > > > > >> > return tblPdtbnfs; > > > > >> > } > > > > >> > > > > > >> > public void > > setTblPdtbnfs(Collection > > > > tblPdtbnfs) { > > > > >> > this.tblPdtbnfs = tblPdtbnfs; > > > > >> > } > > > > >> > > > > > >> > public void > addTblPdtbnf(TblPdtbnf0 > > > > tblPdtbnf) { > > > > >> > tblPdtbnfs.add(tblPdtbnf); > > > > >> > } > > > > >> > > > > > >> > public Integer getScmpdtId() { > > > > >> > return scmpdtId; > > > > >> > } > > > > >> > > > > > >> > public String > > getAdmsysCde() { > > > > >> > return admsysCde; > > > > >> > } > > > > >> > > > > > >> > public void > setAdmsysCde(String > > admsysCde) { > > > > >> > this.admsysCde = admsysCde; > > > > >> > } > > > > >> > > > > > >> > public void setFndCde(String > > fndCde) { > > > > >> > this.fndCde = fndCde; > > > > >> > } > > > > >> > > > > > >> > public String getFndCde(){ > > > > >> > return fndCde; > > > > >> > } > > > > >> > > > > > >> > public void setGccCde(String > > gccCde){ > > > > >> > this.gccCde = gccCde; > > > > >> > } > > > > >> > > > > > >> > public String getGccCde() { > > > > >> > return gccCde; > > > > >> > } > > > > >> > } > > > > >> > > > > > >> > > > > > >> > > > > > > > ======================================================== > > > > >> > (4) Test0.java: > > > > >> > package insert; > > > > >> > > > > > >> > import > > javax.persistence.EntityManager; > > > > >> > import > > > > javax.persistence.EntityManagerFactory; > > > > >> > import > > javax.persistence.Persistence; > > > > >> > > > > > >> > public class Test0 { > > > > >> > > > > > >> > public static void > main(String[] > > args) { > > > > >> > try{ > > > > >> > EntityManagerFactory emf = > > > > >> > > > > > >> > > > > > > > Persistence.createEntityManagerFactory("insert"); > > > > >> > EntityManager em = > > > > emf.createEntityManager(); > > > > >> > > > > > >> > em.getTransaction().begin(); > > > > >> > > > > > >> > TblScmpdt0 tblScmpdt = > new > > > > TblScmpdt0(); > > > > >> > > > > > tblScmpdt.setAdmsysCde("EBSTA"); > > > > >> > > > > > tblScmpdt.setFndCde("1526"); > > > > >> > > > > > tblScmpdt.setGccCde("A1526"); > > > > >> > > > > > >> > TblPdtbnf0 tblPdtbnf = > new > > > > TblPdtbnf0(); > > > > >> > > > tblPdtbnf.setTblScmpdt(tblScmpdt); > > > > >> > > > > > >> > > > tblScmpdt.addTblPdtbnf(tblPdtbnf); > > > > >> > tblScmpdt = > > em.merge(tblScmpdt); > > > > >> > > > em.getTransaction().commit(); > > > > >> > > > > > >> > } catch (Exception e){ > > > > >> > e.printStackTrace(); > > > > >> > } > > > > >> > } > > > > >> > } > > > > >> > > > > > >> > --- On Tue, 6/17/08, Enrico > Goosen > > > > >> > > > <[EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=6>> > > > wrote: > > > > >> > > > > > >> >> From: Enrico Goosen > > > > >> > > > <[EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=7>> > > > > > > > >> >> Subject: Re: > > @OneToMany/@ManyToOne, > > > > Bidirectional, > > > > >> Composite Key > > > > >> >> To: > > > [EMAIL > PROTECTED]<http://n2.nabble.com/user/SendEmail.jtp?type=node&node=1520608&i=8> > > > > >> >> Date: Tuesday, June 17, > 2008, > > 1:32 AM > > > > >> >> Hi Fay, > > > > >> >> > > > > >> >> I tried out your > suggestion: > > > > >> >> @ManyToOne(fetch = > > > > >> >> > > FetchType.LAZY,cascade=CascadeType.MERGE) > > > > >> >> @JoinColumn(name = > > > > >> >> > > > > >> > > > > > > > "XYZ_ID",referencedColumnName="SCMPDT_ID") > > > > >> >> > > > > >> >> private TblScmpdt > tblScmpdt; > > > > >> >> > > > > >> >> But unfortunately, still > no > > luck. > > > > >> >> Got this exception: > > > > >> >> > > <openjpa-1.1.0-r422266:657916 fatal > > > > store > > > > >> error> > > > > >> >> > > > > > org.apache.openjpa.persistence.RollbackException: > > > > >> DB2 SQL > > > > >> >> error: SQLCODE: > > > > >> >> -407, SQLSTATE: 23502, > > SQLERRMC: > > > > TBSPACEID=2, > > > > >> TABLEID=263, > > > > >> >> COLNO=0 > > > > >> >> at > > > > >> >> > > > > >> > > > > > > > > > > org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523) > > > > > > > >> >> at > > > > >> > > test.za.co.metcapri.Tester.test(Tester.java:100) > > > > >> >> at > > > > >> > > test.za.co.metcapri.Tester.main(Tester.java:21) > > > > >> >> Caused by: > > > > <openjpa-1.1.0-r422266:657916 > > > > >> nonfatal > > > > >> >> general error> > > > > >> >> > > > > >> > > > > > > org.apache.openjpa.persistence.PersistenceException: > DB2 > > > > >> >> SQL error: SQLCODE: > > > > >> >> -407, SQLSTATE: 23502, > > SQLERRMC: > > > > TBSPACEID=2, > > > > >> TABLEID=263, > > > > >> >> COLNO=0 > > > > >> >> FailedObject: prepstmnt > > 14779369 INSERT > > > > INTO > > > > >> >> EBSTATUS.TBL_PDTBNF > (PDTBNF_ID, > > > > >> >> SCMPDT_ID, CMN_DTE) VALUES > (?, > > ?, ?) > > > > >> >> > > > > >> > > > > > > > [org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement] > > > > > > > >> >> > > > > >> >> SQLSTATE 23502: An insert > or > > update value > > > > is null, > > > > >> but the > > > > >> >> column cannot > > > > >> >> contain null values. > > > > >> >> > > > > >> >> The closest I came to > solving > > this > > > > problem was a > > > > >> suggestion > > > > >> >> I saw in the > > > > >> >> Hibernate forums, where a > user > > was > > > > experiencing > > > > >> the same > > > > >> >> problem. > > > > >> >> > > > > >> > > > > > > > > > > http://forum.hibernate.org/viewtopic.php?t=987126&highlight=detached&sid=48c7ceada0b8df5718275a74d6dcafc4 > > > > >> >> > > > > >> > > > > > > > > > > http://forum.hibernate.org/viewtopic.php?t=987126&highlight=detached&sid=48c7ceada0b8df5718275a74d6dcafc4 > > > > >> >> > > > > >> >> > > > > >> >> I changed TblPdtbnf.class > to > > use an > > > > @EmbeddedId: > > > > >> >> > > > > >> >> @EmbeddedId > > > > >> >> private TblPdtbnfPK > > tblPdtbnfPK; > > > > >> >> > > > > >> >> Changed TblPdtbnfPK to > > @Embeddable. > > > > >> >> > > > > >> >> I also had to modify the > > setters on > > > > TblPdtbnf like > > > > >> so: > > > > >> >> > > > > >> >> public void > > setTblScmpdt(TblScmpdt > > > > tblScmpdt) { > > > > >> >> this.tblScmpdt = > tblScmpdt; > > > > >> >> if(this.tblPdtbnfPK == > null){ > > > > >> >> this.tblPdtbnfPK = new > > TblPdtbnfPK(); > > > > >> >> } > > > > >> >> if(tblScmpdt != null){ > > > > >> >> > > > > >> > > > > > > this.tblPdtbnfPK.setScmpdtId(tblScmpdt.getScmpdtId()); > > > > >> >> } > > > > >> >> } > > > > >> >> public void > > setTblPdtbnfcde(TblPdtbnfcde > > > > >> tblPdtbnfcde) { > > > > >> >> this.tblPdtbnfcde = > > tblPdtbnfcde; > > > > >> >> if(this.tblPdtbnfPK == > null){ > > > > >> >> this.tblPdtbnfPK = new > > TblPdtbnfPK(); > > > > >> >> } > > > > >> >> if(tblPdtbnfcde != null){ > > > > >> >> > > > > >> > > > > > > > this.tblPdtbnfPK.setPdtbnfId(tblPdtbnfcde.getPdtbnfId()); > > > > >> >> } > > > > >> >> } > > > > >> >> > > > > >> >> I was able to perform a > > cascading > > > > persist, but > > > > >> when I > > > > >> >> checked the database, > > > > >> >> there were two new columns > on > > TBL_PDTBNF, > > > > viz. > > > > >> scmpdtId, > > > > >> >> and pdtbnfId, in > > > > >> >> addition to the existing > > columns > > > > SCMPDT_ID and > > > > >> PDTBNF_ID. > > > > >> >> I tried renaming the > fields on > > > > TblPdtbnfPK.class > > > > >> to match > > > > >> >> the database > > > > >> >> columns, to prevent this > > problem, but > > > > that > > > > >> didn't help. > > > > >> >> > > > > >> >> As a last resort, I tried > > switching JPA > > > > providers > > > > >> to > > > > >> >> Hibernate, and I found > > > > >> >> that the problem exists in > > Hibernate as > > > > well. > > > > >> >> > > > > >> >> I give up...:-(( > > > > >> >> -- > > > > >> >> View this message in > context: > > > > >> >> > > > > >> > > > > > > > > > > http://www.nabble.com/%40OneToMany-%40ManyToOne%2C-Bidirectional%2C-Composite-Key-BUG-tp17801245p17880499.html > > > > >> >> Sent from the OpenJPA > Users > > mailing list > > > > archive > > > > >> at > > > > >> >> Nabble.com. > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > > >> > > > > >> -- > > > > >> View this message in context: > > > > >> > > > > > > > > > > http://n2.nabble.com/%40OneToMany-%40ManyToOne%2C-Bidirectional%2C-Composite-Key-BUG-tp210672p1515826.html > > > > >> Sent from the OpenJPA Users mailing > list > > archive > > > > at > > > > >> Nabble.com. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > View this message in context: > > > > > > > > > > http://n2.nabble.com/%40OneToMany-%40ManyToOne%2C-Bidirectional%2C-Composite-Key-BUG-tp210672p1519911.html > > > > Sent from the OpenJPA Users mailing list > archive > > at > > > > Nabble.com. > > > > > > > > > > > > > > > > > > ------------------------------ > > > This email is a reply to your post @ > > > > > > http://n2.nabble.com/%40OneToMany-%40ManyToOne%2C-Bidirectional%2C-Composite-Key-BUG-tp210672p1520608.html > > > You can reply by email or by visting the link > above. > > > > > > > > > > -- > > View this message in context: > > > http://n2.nabble.com/%40OneToMany-%40ManyToOne%2C-Bidirectional%2C-Composite-Key-BUG-tp210672p1558742.html > > Sent from the OpenJPA Users mailing list archive at > > Nabble.com.