The feature you are looking for is called cascading update.
You store the 1-side object and want all n-side objects to be persisted as well.
To do this trick slightly patch the collection descriptor:
<collection-descriptor
name="events"
element-class-ref="com.gilbert.Event"
orderby="_id"
sort="DESC"
auto-update="true"
>
<inverse-foreignkey field-ref="application_id"/>
</collection-descriptor>
Please also have a closer look to tutorial3.html, section on cascading operations.
cheers, Thomas
Jeffrey Gilbert wrote:
I have the following two class files:
package com.gilbert; import java.util.Collection; public class Applications { private int _id; private String name; private String description; private Collection events; // To hold many event objects
public void set_id(int _id) { this._id = _id; }
public int get_id() { return _id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getDescription() { return description; }
public void setDescription(String description) { this.description=description;
}
public Collection getEvents() { return events; }
public void setEvents(Collection events) { events = events; }
public Applications() { } }
package com.gilbert; public class Event { protected int _id; protected event; protected int application_id;
public void set_id(int _id) { this._id = _id; } public int get_id() { return _id; } public String getEvent() { return Event; } public void setEvent(String event) { this.event = event; } public int getApplication_id() { return application_id; } public void setApplication_id(int application_id) { this.application_id = application_id; }
public Event() { } }
I have the following user defined mappings:
<class-descriptor class="com.gilbert.Event" table="Event"> <field-descriptor name="_id" column="ID" jdbc-type="INTEGER" primarykey="true" autoincrement="true" /> <field-descriptor name="event" column="EVENT" jdbc-type="VARCHAR" /> <field-descriptor name="application_id" column="APPLICATION_ID" jdbc-type="INTEGER" indexed="true" /> </reference-descriptor> </class-descriptor>
<class-descriptor class="com.gilbert.Applications" table="Applications">
<field-descriptor name="_id" column="ID" jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor
name="name"
column="NAME"
jdbc-type="VARCHAR"
/>
<field-descriptor
name="description"
column="DESCRIPTION"
jdbc-type="VARCHAR"
/>
<collection-descriptor
name="events"
element-class-ref="com.gilbert.Event"
orderby="_id"
sort="DESC">
<inverse-foreignkey field-ref="application_id"/>
</collection-descriptor>
</class-descriptor>
Now I use the following code in my program but nothing seems to persist.
//Create new application object. Application application = new Application(); application.setName("test1"); application.setDescription("This is a test"); //Create new event object. Event newEvent = new Event(); newEvent.setEvent("test123"); //Load new event object in vector Vector e = new Vector(); e.add(newEvent);
//Add Vector that contains event into application object.
application.setEvents(e);
// now perform persistence operations
try {
broker.beginTransaction();
broker.store(application);
broker.commitTransaction();
}
catch (PersistenceBrokerException pbe)
{
broker.abortTransaction();
}
What am I doing wrong? Do I need to persist the event object before I persist the application object? Is my user defined mapping file okay?
Thanks in advance,
Jeff
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]