Hello..

I've been pouring over google and the ojb site for hours and can not find the 
info I need to solve this problem before me.

Basically I have 2 entity tables (user and role) with and indirection table 
(user_role). I'm using the ODMG interface. My User bean contains a property 
called "Roles" of the type List. 

I have no problem storing single objects, but when I attempt to store a User 
instance populated with a list of roles, nothing appears in user_role.

Does the ODMG interface not support this storing of object graphs?

////// Here is the DDL //////
CREATE TABLE user (
  id BIGINT NOT NULL AUTO_INCREMENT,
  name VARCHAR (20) NOT NULL,
  credential VARCHAR (32) NOT NULL,
    PRIMARY KEY(id),
    UNIQUE (name)
) Type=InnoDB;

CREATE TABLE role (
  id BIGINT NOT NULL AUTO_INCREMENT,
  code VARCHAR (20) NOT NULL,
  description VARCHAR (40) NOT NULL,
    PRIMARY KEY(id),
    UNIQUE (code)
) Type=InnoDB;

CREATE TABLE user_role (
  id BIGINT NOT NULL AUTO_INCREMENT,
  user_id BIGINT NOT NULL,
  role_id BIGINT NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY (user_id) REFERENCES user (id),
    FOREIGN KEY (role_id) REFERENCES role (id),
    INDEX user_role_1_idx (user_id),
    INDEX user_role_2_idx (role_id)
) Type=InnoDB;

///// repository_user.xml /////
<class-descriptor
  class="com.xyz.businessobjects.UserBO"
  table="user">
  <field-descriptor
    name="id"
    column="id"
    jdbc-type="BIGINT"
    primarykey="true"
    autoincrement="true"/>
  <field-descriptor
    name="name"
    column="name"
    nullable="false"
    jdbc-type="VARCHAR"/>
  <field-descriptor
    name="credential"
    column="credential"
    nullable="false"
    jdbc-type="VARCHAR"/>
  <collection-descriptor
    name="roles"
    element-class-ref="com.xyz.businessobjects.RoleBO"
    indirection-table="user_role"
    auto-retrieve="true"
    auto-update="true">
    <fk-pointing-to-this-class
      column="user_id"/>
    <fk-pointing-to-element-class
      column="role_id"/>
  </collection-descriptor>
</class-descriptor>

<class-descriptor
  class="com.xyz.businessobjects.RoleBO"
  table="role">
  <field-descriptor
    name="id"
    column="id"
    jdbc-type="BIGINT"
    primarykey="true"
    autoincrement="true"/>
  <field-descriptor
    name="code"
    column="code"
    nullable="false"
    jdbc-type="VARCHAR"/>
  <field-descriptor
    name="description"
    column="description"
    nullable="false"
    jdbc-type="VARCHAR"/>
</class-descriptor>

//// methods using ODMG ////
public void setUser(UserBO user)
 throws ServiceException {

  Transaction tx = null;

  try {
      tx = odmg.newTransaction();
      tx.begin();

      tx.lock(user, Transaction.WRITE);

      tx.commit();
  } catch( LockNotGrantedException lnge ) {
    throw new ServiceException(lnge);
  }
};

public UserBO getUser(String name)
 throws ServiceException {

  UserBO user = null;

  try{
    System.out.println(UserBO.class.getName());

    String queryStr = "select userBO from "
     + UserBO.class.getName();

    String whereClause = " where name = $1";
    OQLQuery query = this.createQuery( queryStr
     + whereClause );

    query.bind( name );

    List users = (List) query.execute();

    user = (UserBO)users.get(0);

  }catch( QueryException ex ){
    ex.printStackTrace();
    throw new ServiceException( ex );
  }
  return user;
};

public void setRole(RoleBO role)
 throws ServiceException {

  Transaction tx = null;

  try {
      tx = odmg.newTransaction();
      tx.begin();

      tx.lock(role, Transaction.WRITE);

      tx.commit();
  } catch( LockNotGrantedException lnge ) {
    throw new ServiceException(lnge);
  }

};


public List getRoles() throws ServiceException {

  List roles = null;

  try{
    String queryStr = "select role from "
     + RoleBO.class.getName();

    OQLQuery query = this.createQuery( queryStr );

    roles = (List) query.execute();

  }catch( QueryException ex ){
    ex.printStackTrace();
    throw new ServiceException( ex );
  }

  return roles;
};

Thanks,
Dennis


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

Reply via email to