Hi again,

so, I now tried this:

        // Delete any condending ads
for(ForecastContendingLineItem temp : _forecastItem.getForecastContendingLineItemArray()) {
_forecastItem.removeFromForecastContendingLineItemArray(temp);
        }

        // Now deal with the contending ads
        LineItem contendingLineItem = null;
        ForecastContendingLineItem relation = null;
        for(Integer tempId : result.getContendingAdIds()) {
contendingLineItem = LineItemDfpInfo.getLineItemByDfpId(config.context(), tempId);
          if(contendingLineItem != null) {
            relation = new ForecastContendingLineItem();
            relation.setToForecast(_forecastItem);
            relation.setToLineItem(contendingLineItem);
            relation.setUsedImpressions(0L);
            relation.setOsi(0L);

_forecastItem.addToForecastContendingLineItemArray(relation);
          }
        }

So first, I am trying to remove the existing items from the list (first 3 lines). Then I am adding the new once. I now get this:

org.apache.cayenne.validation.ValidationException: [v.3.0.2 Jun 11 2011 09:31:18] Validation failures: Validation failure for ch.goldbach.lib.ForecastContendingLineItem.toForecast: "toForecast" is required. Validation failure for ch.goldbach.lib.ForecastContendingLineItem.toForecast: "toForecast" is required. at org.apache.cayenne.access.ObjectStoreGraphDiff.validateAndCheckNoop(ObjectStoreGraphDiff.java:111) at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1110) at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1060)

The "setToForecast" method says this:

    public void setToForecast(Forecast toForecast) {
        setToOneTarget("toForecast", toForecast, true);
    }

So, I am bit lost, why the line

    relation.setToForecast(_forecastItem);

does not seem to work. Any ideas?
Gruß/Regards,
Tobias.

*Adternity GmbH*

Kennedydamm 1
40476 Düsseldorf

Tonhallenstraße 16
47051 Duisburg

Tel.: +49 203 298685 37
eMail: [email protected]
Web: http://www.adternity.net

Geschäftsführer: Thomas Servatius, Tobias Wolff, Jörn Mika, Henrik Basten
Amtsgericht: Düsseldorf, HRB 60031
Steuer-Nr.: DE238773677
On 7/31/12 11:00 PM, Tobias Wolff wrote:
Hi,

I am currently trying to do the following in Cayenne 3.0.2:

  * fetch an object A
  * delete some related objects which are related to A in an n:m relation
  * add new objects to A (same n:m relation)

I have undergone a couple of java.util.ConcurrentModificationException and org.apache.cayenne.validation.ValidationException exception without being able to fix them. Here is some code, but a general hint on how to achieve that (especially when to do commits) would be much appreciated.

  * Class Forecast
  * Class LineItem
  * Class ForecastCondendingLineItem (n:m relation between Forecast
    and LineItem)

I have an object F of class Forecast which I have pulled from the database. Now I try to delete the n:m relations like this:

for(ForecastContendingLineItem temp : F.getForecastContendingLineItemArray()) {
  F.removeFromForecastContendingLineItemArray(temp);
  context.deleteObject(temp);
}

This results in the ConcurrentModificationException. I also tried this:

context.deleteObjects(F.getForecastContendingLineItemArray());

There is no exception, but I do not see any DELETE statements in the log either (probably I shoudn't!?). Then later on I try to add new n:m relations like this:

relation = config.context().newObject(ForecastContendingLineItem.class);
            relation.setToForecast(_forecastItem);
            relation.setToLineItem(contendingLineItem);
            relation.setUsedImpressions(0L);
            relation.setOsi(0L);

But this results in the following a ""Validation failure for ch.goldbach.lib.ForecastContendingLineItem.toForecast: "toForecast" is required."" exception although my feeling is that I do set the ToForecast relation through "setToForecast", no?

Anyone can help me out?

Thanks,
  Tobias.


Reply via email to