Hi

I have funny problem with OJB and Collections (m:n relations). Sample servlet code 
(GET metgod):

//-------------------------------------------------------------------
//adding roles
CMSRole admin = new CMSRole("CMS_ADMIN");
CMSRole author = new CMSRole("CMS_AUTHOR");
CMSRole developer = new CMSRole("CMS_DEVELOPER");
CMSRole editor = new CMSRole("CMS_EDITOR");
CMSRole censor = new CMSRole("CMS_CENSOR");
    
broker.beginTransaction();

    broker.store(admin);
    broker.store(author);
    broker.store(developer);
    broker.store(editor);
    broker.store(censor);

broker.commitTransaction();

//adding user with roles
CMSUser test1 = new CMSUser("test1", "test1");
test1.addRole(new CMSRole("CMS_CENSOR"));
test1.addRole(new CMSRole("CMS_EDITOR"));

broker.beginTransaction();

broker.store(test1);
broker.store(test2);

broker.serviceBrokerHelper().link(test1, true);
broker.serviceBrokerHelper().link(test2, true);

broker.commitTransaction();         
out.println("ROLES LIST: \n");

QueryByCriteria rolesQuery = new QueryByCriteria(CMSRole.class, new Criteria());
result = broker.getCollectionByQuery(rolesQuery);
            
Iterator iter = result.iterator();

    while (iter.hasNext()) {
       
       CMSRole rola = (CMSRole)iter.next();
        
       out.println("Role name: " + rola.getRoleName()); 
    }

                    
QueryByCriteria usersQuery = new QueryByCriteria(CMSUser.class);
result = broker.getCollectionByQuery(usersQuery);

Iterator iter2 = result.iterator();

out.println("USERS LIST: \n");

    while (iter2.hasNext()) {
        
        CMSUser user = (CMSUser)iter2.next();
        
        out.println("User name: " + user.getUserName());
        out.println("Roles count: " + user.getRoles().size() + "\n");                  
     
    }
//-------------------------------------------------------------------

This code creates few Roles and then creates user with two roles added. And here is a 
funny part: when database is empty and I'm adding roles and user first time, 
everything is fine, I get string "Roles count: 2". But when I comment adding roles and 
user code and refresh page, Roles count is 0. What am I doing wrong ? Here is a part 
of my repository.xml file: 

//-------------------------------------------------------------------

<class-descriptor
    class="org.imeri.cms.ojb.security.CMSRole"
    table="CMS_ROLES"
>
    <field-descriptor
        name="roleId"
        column="role_id"
        jdbc-type="INTEGER"
        primarykey="true"
        indexed="true"
        autoincrement="true"
    >
        <documentation>Identyfikator wiersza</documentation>
    </field-descriptor>
    <field-descriptor
        name="roleName"
        column="role_name"
        jdbc-type="VARCHAR"
        nullable="false"
        length="50"
    >
        <documentation>Nazwa roli</documentation>
    </field-descriptor>
    <index-descriptor
        name="ROLE_NAME_UNIQUE"
        unique="true"
    >
        <index-column name="role_name"/>
    </index-descriptor>
</class-descriptor>
<class-descriptor
    class="org.imeri.cms.ojb.security.CMSUser"
    table="CMS_USERS"
>
    <field-descriptor
        name="userId"
        column="user_id"
        jdbc-type="INTEGER"
        primarykey="true"
        indexed="true"
        autoincrement="true"
    >
        <documentation>Identyfikator wiersza</documentation>
    </field-descriptor>
    <field-descriptor
        name="userName"
        column="user_name"
        jdbc-type="VARCHAR"
        nullable="false"
        length="50"
    >
        <documentation>Nazwa uzytkownika</documentation>
    </field-descriptor>
    <field-descriptor
        name="password"
        column="user_password"
        jdbc-type="VARCHAR"
        nullable="false"
        length="50"
    >
        <documentation>Haslo uzytkownika</documentation>
    </field-descriptor>
    <collection-descriptor
        name="roles"
        collection-class="org.apache.ojb.broker.util.collections.ManageableVector"
        element-class-ref="org.imeri.cms.ojb.security.CMSRole"
        indirection-table="USERS_ROLES_KEYS"
        auto-retrieve="true"
        auto-update="link"
        auto-delete="link"
    >
        <fk-pointing-to-this-class column="userId"/>
        <fk-pointing-to-element-class column="roleId"/>
    </collection-descriptor>
    <index-descriptor
        name="USER_NAME_UNIQUE"
        unique="true"
    >
        <index-column name="user_name"/>
    </index-descriptor>
</class-descriptor>

//-------------------------------------------------------------------

Best regards
Lukasz Grabski



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

Reply via email to