I run into problem with M:N relationship. I have a User class (Korisnik) and 
Jobs class (VrstaPosla). User can do several jobs and one type of job can 
have zero or more users assotiated with it. I made next repository file for 
this:

<!-- Please keep user defined mappings in this file only
     to avoid mixing user defined and system mappings. -->   
<!-- Mapping of User defined classes starts here -->

<!-- Definitions for com.birosoft.comex.entity.user.Korisnik -->
   <class-descriptor
          class="com.birosoft.comex.entity.user.Korisnik"
          table="DC_USERS"
   >
      <field-descriptor id="1"
         name="korisnickoIme"
         column="USERNAME"
         jdbc-type="VARCHAR"
         primarykey="true"
      />
      <field-descriptor id="2"
         name="punoIme"
         column="FULLNAME"
         jdbc-type="VARCHAR"
      />
      <collection-descriptor
         name="vrstaPosla"
         element-class-ref="com.birosoft.comex.entity.user.VrstaPosla"
         indirection-table="DC_USERS_JOBS"
      >
        <fk-pointing-to-this-class column="USERNAME"/>
        <fk-pointing-to-element-class column="JOB"/>
      >
      </collection-descriptor>
   </class-descriptor>

<!-- Definitions for com.birosoft.comex.entity.user.VrstaPosla -->
   <class-descriptor
          class="com.birosoft.comex.entity.user.VrstaPosla"
          table="DC_JOBS"
   >
      <field-descriptor id="1"
         name="posao"
         column="JOB"
         jdbc-type="INTEGER"
         primarykey="true"
         autoincrement="true"
      />
      <field-descriptor id="2"
         name="naziv"
         column="JOBNAME"
         jdbc-type="VARCHAR"
      />
      <collection-descriptor
         name="korisnici"
         element-class-ref="com.birosoft.comex.entity.user.Korisnik"
         indirection-table="DC_USERS_JOBS"
      >
        <fk-pointing-to-this-class column="JOB"/>
        <fk-pointing-to-element-class column="USERNAME"/>
      >
      </collection-descriptor>
   </class-descriptor>

<!-- Mapping of User defined classes ends here -->

I have next tables in Hsqldb and data in it:

CREATE TABLE DC_USERS(USERNAME VARCHAR NOT NULL PRIMARY KEY,FULLNAME VARCHAR)
CREATE TABLE DC_JOBS(JOB INTEGER NOT NULL PRIMARY KEY,JOBNAME VARCHAR NOT 
NULL)
CREATE TABLE DC_USERS_JOBS(USERNAME VARCHAR NOT NULL,JOB INTEGER NOT 
NULL,UNIQUE(USERNAME,JOB))
INSERT INTO DC_USERS VALUES('mikeai','Miroslav')
INSERT INTO DC_JOBS VALUES(1,'Administrator')
INSERT INTO DC_JOBS VALUES(2,'Skladi\u0161tenje')
INSERT INTO DC_JOBS VALUES(3,'Proizvodnja')
INSERT INTO DC_JOBS VALUES(4,'Nabavka')
INSERT INTO DC_JOBS VALUES(5,'Prodaja')
INSERT INTO DC_USERS_JOBS VALUES('mikeai',1)

User class (Korisnik) looks like:

package com.birosoft.comex.entity.user;

import java.io.Serializable;
import java.util.*;

/**
 * <p>
 * 
 * </p>
 */
public class Korisnik implements Serializable
{

    private String korisnickoIme; 
    private String punoIme; 
    private Vector vrstaPosla;

    public String getKorisnickoIme() {        
        return korisnickoIme;
    } // end getKorisnickoIme        

    public void setKorisnickoIme(String _korisnickoIme) {        
        korisnickoIme = _korisnickoIme;
    } // end setKorisnickoIme        

    public String getPunoIme() {        
        return punoIme;
    } // end getPunoIme        

    public void setPunoIme(String _punoIme) {        
        punoIme = _punoIme;
    } // end setPunoIme
    
    public Vector getVrstaPosla()
    {
        return vrstaPosla;
    }
    public void setVrstaPosla(Vector v)
    {
        vrstaPosla = v;
    }

    public void addPosao(VrstaPosla posao) {        
        vrstaPosla.add(posao);
    } // end addPosao        

    public void removePosao(VrstaPosla posao) {        
        vrstaPosla.remove(posao);
    } // end removePosao        

/**
 * <p>
 * Ispisuje naziv objekta
 * </p>
 * <p>
 * 
 * @return a String sa nazivom objekta
 * </p>
 */
    public String toString() {        
        return this.korisnickoIme+" <"+this.punoIme+">";
    } // end toString        

} // end Korisnik

Jobs class (VrstaPosla) looks like:

package com.birosoft.comex.entity.user;

import java.io.Serializable;
import java.util.*;

/**
 * <p>
 * 
 * </p>
 */
public class VrstaPosla implements Serializable {

  ///////////////////////////////////////
  // attributes


    private int posao;
    private String naziv;
    private Vector korisnici;

  ///////////////////////////////////////
  // methods

    public int getPosao() {        
        return posao;
    } 

    public void setPosao(int _posao) {        
        posao = _posao;
    } 
    
    public String getNaziv() {
        return naziv;
    }
    
    public void setNaziv(String _naziv) {
        naziv = _naziv;
    }
    
    public Vector getKorisnici() {
        return korisnici;
    }
    
    public void setKorisnici(Vector v) {
        korisnici = v;
    }

    public String toString() {
        /*
        switch (posao) {
            case SKLADISTENJE: return new String("Skladištenje");
            case PROIZVODNJA: return new String("Proizvodnja");
            case NABAVKA: return new String("Nabavka");
            case PRODAJA: return new String("Prodaja");
        } */
        return naziv;
    } 

} // end VrstaPosla

Now what's the problem. I want to be able to remove user from some job. I'm 
using next code to change a collection which holds user for job object.

            if (this.selectedUserList.getSelectedIndex()>-1)
            {
                Korisnik k = (Korisnik) 
this.selectedUserList.getSelectedValue();
                VrstaPosla vp = (VrstaPosla) this.jobsCombo.getSelectedItem();
                Vector hu = vp.getKorisnici();
                hu.remove(k);
                vp.setKorisnici(hu);
                this.jobsBean.storeJob(vp);
                this.checkLists();
            }

When I run this code OJB deletes appropriate record from DC_USERS_JOBS table 
but it also deletes a user 'mikeai' from DC_USERS table. Why? I tried to put 
into collection descriptor auto-update and auto-delete to false but when run 
this code I got user deleted anyway. I'm using now SessionBeans with PBAPI 
instead ODMG. 
BTW, I'm using db-ojb-rc4 from CVS.

-- 
Best regards,
Mickey          [EMAIL PROTECTED], [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to