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]> wrote:
> 
>> From: piltrafeta <[EMAIL PROTECTED]>
>> Subject: Re: @OneToMany/@ManyToOne, Bidirectional, Composite Key
>> To: users@openjpa.apache.org
>> 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]> wrote:
>> > 
>> >> From: Enrico Goosen
>> <[EMAIL PROTECTED]>
>> >> Subject: Re: @OneToMany/@ManyToOne, Bidirectional,
>> Composite Key
>> >> To: users@openjpa.apache.org
>> >> 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.

Reply via email to