openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rick Curtis <curti...@gmail.com>
Subject Re: CheckDatabaseForCascadePersistToDetachedEntity=true in OSGi
Date Thu, 01 May 2014 17:03:39 GMT
> When I try save a model which has a reference to one of the readonly catalogs
(which I don't want to update) and which I get through the catalogs-persistence
service (so the model-persistence is handling an object from another
persistence unit)

The problem is that you're trying persist an Entity(model) that has a
relationship to another Entity(catalog) that is from a different
persistence unit. From the model-persistence persistence unit's point of
view, the catalog that is referenced by your model is a non-persistent
field.

I'm reaching a bit here, but I think you have two options. Either compress
down to one persistence unit, or mark model->catalog as @Transient so that
relationship will be ignored by OpenJPA.

Thanks,
Rick


On Wed, Apr 30, 2014 at 1:26 PM, John Bower <john@zode64.com> wrote:

> Hi
>
> My setup is - servicemix 5.0.0, openjpa 2.2.2, Mysql 5.5 database.
>
> I have 4 bundles, model-persistence, catalogs-persistence, models and
> catalogs. The 2 persistence bundles each have a persistence unit.
>
> The model-persistence bundle provides an OSGi service to save a model which
> is defined in in the models bundle. The catalogs-persistence provide a
> readonly get services which gets catalogs which are referenced by the
> model.
>
> When I try save a model which has a reference to one of the readonly
> catalogs (which I don't want to update) and which I get through the
> catalogs-persistence service (so the model-persistence is handling an
> object from another persistence unit)
>
> 15:09:53,324 | DEBUG | ectronica/create | ServiceRecipe
>  | 7 - org.apache.aries.blueprint.core - 1.4.0 | Method entry: getService,
> args org.apache.karaf.jndi.KarafInitialContextFactory@2cf5e0f0
> 15:09:53,339 | DEBUG | ectronica/create | context
>  | 199 - org.apache.aries.jpa.container.context - 1.0.1 | Created a new
> persistence context
> org.apache.aries.jpa.container.impl.EntityManagerWrapper@7933da2e for
> transaction
>
> [Xid:globalId=10ffffffe51effffffb4451006f72672e6170616368652e61726965732e7472616e73616374696f6e0000000000000000000000000000,length=64,branchId=0000000000000000000000000000000000000000000000000000000000000000,length=64].
> 15:09:53,512 | WARN  | ectronica/create | Transaction
>  | 230 - org.apache.aries.transaction.manager - 1.1.0 | Unexpected
> exception from beforeCompletion; transaction will roll back
> <openjpa-2.2.2-r422266:1468616 nonfatal user error>
> org.apache.openjpa.persistence.InvalidStateException: Encountered unmanaged
> object "catalog.Catalog-673" in life cycle state  unmanaged while cascading
> persistence via field "model.Model.catalog" during flush.  However, this
> field does not allow cascade persist. You cannot flush unmanaged objects or
> graphs that have persistent associations to unmanaged objects.
>  Suggested actions: a) Set the cascade attribute for this field to
> CascadeType.PERSIST or CascadeType.ALL (JPA annotations) or "persist" or
> "all" (JPA orm.xml),
>  b) enable cascade-persist globally,
>  c) manually persist the related field value prior to flushing.
>  d) if the reference belongs to another context, allow reference to it by
> setting StoreContext.setAllowReferenceToSiblingContext().
> FailedObject: catalog.Catalog-673
>         at
>
> org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:786)
>         at
>
> org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:621)
>         at
>
> org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:589)
>         at
>
> org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:505)
>         at
>
> org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:3018)
>         at
> org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:44)
>         at
>
> org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1034)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2122)
>         at
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2082)
>         at
> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:2000)
>         at
>
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527)
>         at
>
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:511)
>         at
>
> org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413)
>
> I was thinking that this is what
> the CheckDatabaseForCascadePersistToDetachedEntity=true property is so I
> added it to the persistence unit.
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
>
>     <persistence-unit name="model" transaction-type="JTA">
>
>         <class>model.Model</class>
>
>         <exclude-unlisted-classes />
>
>         <properties>
>
>             <property name="openjpa.Compatibility" value=
> "CheckDatabaseForCascadePersistToDetachedEntity=true" />
>
>         </properties>
>
>     </persistence-unit>
>
> </persistence>
>
> But it doesn't change anything.
>
> Should this option remove the problem I am having? Should it work in OSGi?
> Are there any suggestions as to what I am doing wrong and if it is possible
> at all?
>
> Cheers
>
> John
>



-- 
*Rick Curtis*

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