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]