I should also mention that the actual Node object does get updated, just not the Emissions. So as I loop through, the modifiedBy and modifiedDate fields in Node are getting set and those new values are properly stored in the DB.
Regards, August ----- Original Message ---- From: August Detlefsen <[EMAIL PROTECTED]> To: dev@castor.codehaus.org Sent: Friday, October 31, 2008 9:13:09 AM Subject: Re: [castor-dev] Persistent Objects not updating in for loop Emissions is a polymorphic object, extending from Node: <!-- Mapping for Emissions --> <class name="org.openeco.footprint.model.Emissions" extends="com.codemagi.servlets.model.Node" identity="id"> <description>An actual emission for one month</description> <cache-type type="none"/> <map-to table="emissions_data" xml="emissions-data" /> <field name="id" type="integer"> <sql dirty="ignore" name="node_id" type="integer"/> <bind-xml name="id" node="element"/> </field> <field name="source" type="org.openeco.footprint.model.Source"> <sql dirty="ignore" name="source_id"/> <bind-xml name="source" node="element"/> </field> <field name="sourceName" type="org.openeco.footprint.model.SourceName"> <sql dirty="ignore" name="source_name_id"/> <bind-xml name="source-name" node="element"/> </field> <field name="orgId" type="integer"> <sql dirty="ignore" name="org_id" type="integer"/> <bind-xml name="org-id" node="element"/> </field> <field name="startDate" type="date"> <sql dirty="ignore" name="start_date" type="date"/> <bind-xml name="start-date" node="element"/> </field> <field name="CO2" type="float" > <sql name="co2_emissions" type="numeric"/> <bind-xml name="CO2" node="element"/> </field> <field name="CH4" type="float" > <sql name="ch4_emissions" type="numeric"/> <bind-xml name="CH4" node="element"/> </field> <field name="N2O" type="float" > <sql name="n2o_emissions" type="numeric"/> <bind-xml name="N2O" node="element"/> </field> <field name="HFC" type="float" > <sql name="hfc_emissions" type="numeric"/> <bind-xml name="HFC" node="element"/> </field> <field name="PFC" type="float" > <sql name="pfc_emissions" type="numeric"/> <bind-xml name="PFC" node="element"/> </field> <field name="SF6" type="float" > <sql name="sf6_emissions" type="numeric"/> <bind-xml name="SF6" node="element"/> </field> <field name="totalCO2" type="float" > <sql name="total_co2_equivalent" type="numeric"/> <bind-xml name="total-co2" node="element"/> </field> <field name="type" type="org.openeco.footprint.model.FuelType"> <sql name="fuel_type_id"/> <bind-xml name="fuel-type" node="element"/> </field> <field name="fuelUnit" type="org.openeco.ghg.model.Units"> <sql name="fuel_unit_id" /> <bind-xml name="fuel-unit" node="element"/> </field> <field name="fuelAmount" type="float" > <sql name="fuel_amount" type="numeric"/> <bind-xml name="fuel-amount" node="element"/> </field> <field name="activityUnit" type="org.openeco.ghg.model.Units"> <sql name="activity_unit_id" /> <bind-xml name="activity-unit" node="element"/> </field> <field name="activityAmount" type="float" > <sql name="activity_amount" type="numeric"/> <bind-xml name="activity-amount" node="element"/> </field> </class> <!-- Mapping for Node --> <class name="com.codemagi.servlets.model.Node" identity="id" key-generator="IDENTITY"> <cache-type type="none"/> <description>Node, the base class for all object types</description> <map-to table="node" xml="node" /> <field name="id" type="integer"> <sql dirty="ignore" name="node_id" type="integer"/> <bind-xml name="id" node="element"/> </field> <field name="name" type="string" > <sql dirty="ignore" name="node_name" type="varchar"/> <bind-xml name="name" node="element"/> </field> <field name="className" type="string" > <sql dirty="ignore" name="class_name" type="varchar"/> <bind-xml name="class-name" node="element"/> </field> <field name="createdBy" type="org.openeco.login.model.User"> <sql dirty="ignore" name="created_by" /> <bind-xml name="created-by" node="element" transient="true" /> </field> <field name="createdDate" type="date"> <sql dirty="ignore" name="created_date" type="timestamp"/> <bind-xml name="created-date" node="element"/> </field> <field name="modifiedBy" type="org.openeco.login.model.User"> <sql dirty="ignore" name="modified_by" /> <bind-xml name="modified-by" node="element" transient="true"/> </field> <field name="modifiedDate" type="date"> <sql dirty="ignore" name="modified_date" type="timestamp"/> <bind-xml name="modified-date" node="element"/> </field> <field name="ipAddress" type="string" > <sql dirty="ignore" name="ip_address" type="varchar"/> <bind-xml name="ip-address" node="element"/> </field> <field name="parent" type="com.codemagi.servlets.model.Node"> <sql dirty="ignore" name="parent_id" many-table="node_node_xref" many-key="child_id" /> <bind-xml name="parent"/> </field> <field name="terms" type="com.codemagi.servlets.model.Term" collection="arraylist"> <sql dirty="ignore" name="term_id" many-table="term_node_xref" many-key="node_id" /> <bind-xml name="terms"/> </field> <field name="children" type="com.codemagi.servlets.model.Node" collection="arraylist"> <sql dirty="ignore" name="child_id" many-table="node_node_xref" many-key="parent_id" /> <bind-xml name="children"/> </field> <field name="users" type="org.openeco.login.model.User" collection="arraylist"> <sql dirty="ignore" name="user_id" many-table="node_user_xref" many-key="node_id" /> <bind-xml name="users"/> </field> </class> ----- Original Message ---- From: Werner Guttmann <[EMAIL PROTECTED]> To: dev@castor.codehaus.org Sent: Friday, October 31, 2008 1:10:19 AM Subject: Re: [castor-dev] Persistent Objects not updating in for loop August, what does the mapping look like for Emission entities ? Werner August Detlefsen wrote: > Greetings. I am having an issue getting persistent objects to update when > they are updated inside a for() loop. Here's the scenario: > > We are storing CO2 emissions over the course of a span of months. For each > month, there is either an existing emission to be updated, or we need to > create a new one. > > Any new objects we create in the course of the loop are getting added to the > database properly, but existing objects that updated are not getting > persisted and the changes do not show up in the DB. > > The code works like this: > > //load up all existing emissions in the span > > > HashMap existingEmissions = new HashMap(); > oql = db.getOQLQuery(" SELECT e FROM > org.openeco.footprint.model.Emissions e " + > " WHERE e.sourceName.id = $1 " + > " AND e.startDate >= $2 AND e.startDate <= > $3 "); > oql.bind(name.getId()); > oql.bind(startDate); > oql.bind(endDate); > > results = oql.execute(); > while (results.hasMore()) { > Emissions e = (Emissions)results.next(); > existingEmissions.put(e.getStartDate(), e); > } > > // Explicitly close the QueryResults > > > results.close(); > > // Explicitly close the OQLQuery > > > oql.close(); > > //for each month in the span, create or edit emission > > > for (int i = 0; i < span; i++) { > > Date emissionDate = DateUtils.addMonths(startDate, i); > log.debug("Checking for emission with name: " + name.getId() > + " and date: " + emissionDate); > > Emissions emission = > (Emissions)existingEmissions.get(emissionDate); > log.debug("Existing emissions: " + emission + " persistent? " > + db.isPersistent(emission)); > if (emission == null) { > emission = new Emissions(); > emission.setSourceName(name); > emission.setStartDate( emissionDate ); > } > > //set new values into emission > emission.setCO2(CO2); > emission.setCH4(CH4); > emission.setN2O(N2O); > emission.setHFC(HFC); > emission.setPFC(PFC); > emission.setSF6(SF6); > emission.setTotalCO2(totalCO2); > > if (emission.getId() == null) { > log.debug("Creating new emission: " + emission); > db.create(emission); > } > > } > > //save changes to db > > > log.debug("About to commit..."); > db.commit(); > log.debug("Done."); > > > I've checked all the code and eliminated all the usual suspects: > > - Emissions are not loaded with Database.ReadOnly > - Added and removed <sql dirty="ignore" from mappings > - No access="read-only" in mappings > - The database user does have UPDATE permissions on the table in question > > In addition, we have a separate method that just updates a single existing > Emissions and that method does store the changes properly in the database, so > we know that there is nothing preventing this object from being updated under > normal circumstances. > > So what could be causing this? Are there any known issues with JDO updates > inside a for() loop? > > Thanks, > August > > > > > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > > --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email