cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrey Razumovsky <razumovsky.and...@gmail.com>
Subject Re: Hollow object throwing FaultFailureException
Date Wed, 07 Oct 2009 07:51:05 GMT
Or, try to unregister HOLLOW object (using
context.getGraphManager().unregisterNode()) before any changes

2009/10/7 Andrey Razumovsky <razumovsky.andrey@gmail.com>

> Hi,
>
> I think this happens because HOLLOW object instance is not the same as NEW
> object you're creaing. To get rid of HOLLOW object, I reccomend invalidating
> ENTITYASSNSTOENTITY that points to missing row after healing that row (using
> ObjectContext.invalidateObjects()).
>
> Hope this helps,
>
> 2009/10/7 Lawrence Gerstley <lawgers@gmail.com>
>
>  Hello,
>>
>> I've searched back through old postings and seen a little bit about this
>> back in V2, but nothing recently. Was wondering if anyone had any idea how
>> to handle this problem:
>>
>> Take a model including two tables: ENTITYASSNTOENTITY and ENTRYSTATE,
>> where the column ENTRYSTATEID is present in both.
>> ENTITYASSNTOENTITY.ENTRYSTATEID is a FK to ENTRYSTATE.ENTRYSTATEID (Primary
>> Key). This is modeled as a one-to-one relationship.
>>
>> Problematically, it is possible for the ENTRYSTATEID in
>> ENTITYASSNSTOENTITY to have a key populated in it that is now missing in
>> ENTRYSTATE. Certainly, this breaks integrity, but that's not under my
>> control for historical and other reasons. Thus, when I have an
>> ENTITYASSNSTOENTITY, such as eate1, and I want to get to the related
>> ENTRYSTATE with a "toEntryState" method, I get a hollow object that refers
>> to a missing ENTRYSTATE record. If I try to access any fields within that
>> record, I get and catch a "FaultFailureException", indicating that I have no
>> matching row in the database. That's all fine.
>>
>> What I need to do is to gracefully handle the error by allowing the
>> database to "self-heal" from such a missing record. I want to populate the
>> hollow object with values and commit it to reinsert a row in the database to
>> correct for the integrity error, or create a new ENTRYSTATE object to take
>> the place of the hollow and absent one. I tried to create a
>> childDataContext, move the hollow and absent ENTRYSTATE record to it,
>> populate, then commitChanges, but this still throws a follow-on exception
>> for the missing row. If I create a new ENTRYSTATE and try to attach it with
>> eate1.setToEntryState(newEntryState), I also get the same error related to
>> the absent record. When the application is restarted, however, all works
>> fine, because the missing record was committed and persisted, and now no
>> exceptions are thrown. The issue is that I want to handle this gracefully
>> with no necessary reloading.
>>
>> Reading from previous postings, I saw some information on having to treat
>> the relationship as a many-to-one, and handling it with covering methods. Is
>> this the only fix for this issue? Should I commit the missing record,
>> invalidate the state of the ENTITYASSNSTOENTITY object and reload?
>>
>> As always. thanks for any ideas you might have.
>>
>> Cheers--Lawrence
>>
>
>
>
> --
> Andrey
>



-- 
Andrey

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message