RE: Newbie OJB problemThanks, Pete, it turns out that ant wasn't copying over the 
latest repository_user.xml file and thus it was using an old copy which, surprisingly, 
only had the two columns, so you can chalk that one up to user-error.  The other 
comments were helpful.  One other question for the group.  Say I have a collection of 
UserRole objects in my Users object (see definition below), the user_id field is 
auto_increment so I cannot set the user_id attribute on any of the UserRoles objects 
until I persist the User object.  If i have auto-update set to on, will this be taken 
care of automagically?  i.e. will OJB persist the users object, and then call the 
userRole.setUserId() method automatically when the Users object is stored?  

Thanks again,

Chuck Grohowski
  ----- Original Message ----- 
  From: McKinstry, Pete (HQP) 
  To: 'charles grohowski' ; OJB Users List 
  Sent: Thursday, April 03, 2003 12:38 PM
  Subject: RE: Newbie OJB problem


  I'm a relative newbie to OJB, but i'll give this one a whirl. 

  See comments preceded w/ pgm: 

  -----Original Message----- 
  From: charles grohowski [mailto:[EMAIL PROTECTED] 
  Sent: Wednesday, April 02, 2003 3:16 PM 
  To: OJB Users List 
  Subject: Newbie OJB problem 



  Hi, 
  I recently set up OJB to work with a MySQL database and am having a problem storing 
an UserRoles object I created.  Here are snippets from the repository_user.xml and 
other important files.

  repository_user.xml: 

   <class-descriptor 
       class="ojb.Users" 
       table="users" 
     > 
   <field-descriptor 
      name="id" 
      column="id" 
      jdbc-type="INTEGER" 
      nullable="false" 
      primarykey="true" 
      autoincrement="true" 
      
   /> 
   <field-descriptor 
      name="logon" 
      column="logon" 
      jdbc-type="VARCHAR" 
      
   /> 

  ... more here, cut for brevity 

      <collection-descriptor 
         name="userRoles" 
         element-class-ref="edu.rutgers.rsa.ojb.UserRoles" 
         auto-retrieve="true" 
      > 
         <inverse-foreignkey field-ref="userId"/> 
         
   </collection-descriptor> 
  </class-descriptor> 

     <class-descriptor 
       class="ojb.UserRoles" 
       table="user_roles" 
     > 
   <field-descriptor 
      name="userId" 
      column="user_id" 
      jdbc-type="INTEGER" 
      primarykey="true" 
      
   /> 

   <field-descriptor 
      name="roleName" 
      column="role_name" 
      jdbc-type="VARCHAR" 
      primarykey="true" 
      
   /> 

   <field-descriptor 
      name="logon" 
      column="logon" 
      jdbc-type="VARCHAR" 
      
   /> 
      <reference-descriptor 
         name="users" 
         class-ref="edu.rutgers.rsa.ojb.Users" 
         auto-retrieve="true" 
         auto-delete="false" 
         auto-update="false" 
      > 
         <foreignkey field-ref="userId"/> 
   </reference-descriptor> 

     </class-descriptor> 

  Classes: 
  UserRoles.java 
  public class UserRoles { 
          
          private Integer userId; 
          public void setUserId( Integer userId ) { this.userId = userId; } 
          public Integer getUserId() { return userId; } 
          
          private String logon; 
          public void setLogon( String logon ) { this.logon = logon; } 
          public String getLogon() {  return logon; } 

          private String roleName; 
          public void setRoleName( String roleName ) { this.roleName = roleName; } 
          public String getRoleName() {  return roleName; } 

          private Users users; 
          public void setUsers( Users users ) { this.users = users; } 
          public Users getUsers() { return users; } 
  } 



  Users.java 

  public class Users { 

          private Integer id; 
          public void setId( Integer id ) { this.id = id; } 
          public Integer getId() {  return id; } 

          private String logon; 
          public void setLogon( String logon ) { this.logon = logon; } 
          public String getLogon() {  return logon; } 

          private Vector userRoles; 
          public void setUserRoles( Vector userRoles ) { this.userRoles = userRoles; } 
          public Vector getUserRoles() { return userRoles; } 

  // cut for brevity as well        
          
  } 

  1st question: When I store a User object which has a Vector of User Roles should 
these UserRole objects be persisted automagically? (they're not currently and I have 
to store all the objects related to a user separately).  If this is possible, how is 
it accomplished?  

  pgm: if you set auto-update=true in your mapping, (similar to auto-retrieve flag) 
the relationship objects will be automagically persisted when you persist the 
container (in your case, saving the User will save the UserRoles stored in the User's 
collection)

  2nd question: Am I mapping this relationship correctly? (It's a 1:n relationship 
Users:UserRoles ) 

  pgm: seems right to me. 

  Now the real problem, when i go to store a UserRoles object, I get the following 
debug code: 

  [org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: SELECT 
role_name,logon FROM user_roles WHERE logon = ?  AND role_name = ? 

  [org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: INSERT 
INTO user_roles (logon,role_name) VALUES ( ?, ? )

  Why is this totally ignoring my user_id field even though it's specified as a 
primary key? 

  pgm: Not sure. I've never looked @ the SQL that OJB generates. Are you assigning the 
PK field yourself. If so, you can set auto-increment to false in the descriptor, which 
I believe will ensure that the PK strategy specified in your OJB.properties file will 
not be used. This might help. Perhaps someone else can help w/ this one... 

  Any help is appreciated as I am wearing a hole in my desk from banging my head on 
it.  

  Thanks for any and all help ( I thought I mapped things correctly according to the 
tutorials ), 

  Chuck Grohowski 

Reply via email to