You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Akash Gunjal <ak...@in.ibm.com> on 2013/10/21 18:50:54 UTC

JPA exception while persistence into database

Hi,

I am trying to persist an entity into the database. That entity has a field
associated with another entity. Both these entities belong to different
persistence units. When trying to persist the entity I get the below error.

> Invalid parameter - Encountered unmanaged object
"com.ibm.powersc.ts.policies.vlan.persistence.VLANPolicy@40004000" in life
cycle state  unmanaged while cascading persistence via field
"com.ibm.sc.core.persistence.Zone.policies<element:class
com.ibm.sc.core.persistence.Policy>" 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().


I tried to give cascade.All option to the field having entity reference,
then I get an error message "This entity is not managed by this context".

Regards,
Akash


Re: JPA exception while persistence into database

Posted by Rick Curtis <cu...@gmail.com>.
Is there any reason that you need to use two different persistence units?
Why not merge them into one? I'm going to suggest that you find a copy of
Pro JPA 2 and take a read through that. It will help give you a better
understanding of how to properly use JPA.

Also, be aware that openjpa.Multithreaded has a number of known bugs.
Ideally you should avoid sharing EntityManagers across threads rather than
using that property.

Thanks,
Rick


On Mon, Oct 21, 2013 at 9:15 PM, Akash Gunjal <ak...@in.ibm.com> wrote:

> Hi,
>
> Both entities belong to different persistence units and have their own
> entity managers. I have pasted the persistence.xml snippet below for both
> the persistence files. The Zone entity in persistenceUnit1 has a field
> property of Policy entity also in persistenceUnit1. This Policy entity is a
> base class of another entity CustomPolicy which is in persistenceUnit2. I
> am trying to persist the Zone with entity manager of persistenceUnit1. This
> is when I hit the problem. If we cannot persist this way, then what could
> be solution to this issue.
>
> <persistence-unit name="PersistenceUnit1">
>                 <jta-data-source>jdbc/db2connection</jta-data-source>
>                 <class>mypack.src.Policy</class>
>                 <class>mypack.src.Zone</class>
>                 <exclude-unlisted-classes>false</exclude-unlisted-classes>
>                 <validation-mode>NONE</validation-mode>
>                 <properties>
>                          <!-- Create the database tables on startup -->
>                         <property name="openjpa.jdbc.SynchronizeMappings"
> value=
> "buildSchema(ForeignKeys=true)"/>
>                         <property name="openjpa.Log"
> value="DefaultLevel=ERROR"/>
>                         <property name="openjpa.jdbc.DBDictionary"
> value="db2"/>
>                         <property name="openjpa.Multithreaded"
> value="true"/>
>                         <property name="openjpa.jdbc.TransactionIsolation"
> value="read-committed" />
>                 </properties>
>         </persistence-unit>
>
>
>
> <persistence-unit name="PersistenceUnit2">
>                 <jta-data-source>jdbc/db2connection</jta-data-source>
>                 <class>mycustom.src.CustomPolicy</class>
>                 <class>mypack.src.Policy</class>
>                 <exclude-unlisted-classes>true</exclude-unlisted-classes>
>                 <validation-mode>NONE</validation-mode>
>                 <properties>
>                          <!-- Create the database tables on startup -->
>                         <property name="openjpa.jdbc.SynchronizeMappings"
> value=
> "buildSchema(ForeignKeys=true)"/>
>                         <property name="openjpa.Log"
> value="DefaultLevel=ERROR"/>
>                         <property name="openjpa.jdbc.DBDictionary"
> value="db2"/>
>                         <property name="openjpa.Multithreaded"
> value="true"/>
>                         <property name="openjpa.jdbc.TransactionIsolation"
> value="read-committed" />
>                 </properties>
>         </persistence-unit>
>
>
> Regards,
> Akash
>
>
>
> From:   Rick Curtis <cu...@gmail.com>
> To:     users <us...@openjpa.apache.org>,
> Date:   10/22/2013 12:42 AM
> Subject:        Re: JPA exception while persistence into database
>
>
>
> > That entity has a field associated with another entity. Both these
> entities belong to different persistence units.
> You can't persist a relationship from an Entity to another Entity that
> belongs in a different persistence units. An EntityManager will only
> operate against Entities that are a part of it's persistence unit
> definition. Do you truly have two different persistence units, or do you
> just have two different EntityManagers?
>
>
>
> On Mon, Oct 21, 2013 at 11:50 AM, Akash Gunjal <ak...@in.ibm.com>
> wrote:
>
> > Hi,
> >
> > I am trying to persist an entity into the database. That entity has a
> field
> > associated with another entity. Both these entities belong to different
> > persistence units. When trying to persist the entity I get the below
> error.
> >
> > > Invalid parameter - Encountered unmanaged object
> > "com.ibm.powersc.ts.policies.vlan.persistence.VLANPolicy@40004000" in
> life
> > cycle state  unmanaged while cascading persistence via field
> > "com.ibm.sc.core.persistence.Zone.policies<element:class
> > com.ibm.sc.core.persistence.Policy>" 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().
> >
> >
> > I tried to give cascade.All option to the field having entity reference,
> > then I get an error message "This entity is not managed by this context".
> >
> > Regards,
> > Akash
> >
> >
>
>
> --
> *Rick Curtis*
>
>
>


-- 
*Rick Curtis*

Re: JPA exception while persistence into database

Posted by Akash Gunjal <ak...@in.ibm.com>.
Hi,

Both entities belong to different persistence units and have their own
entity managers. I have pasted the persistence.xml snippet below for both
the persistence files. The Zone entity in persistenceUnit1 has a field
property of Policy entity also in persistenceUnit1. This Policy entity is a
base class of another entity CustomPolicy which is in persistenceUnit2. I
am trying to persist the Zone with entity manager of persistenceUnit1. This
is when I hit the problem. If we cannot persist this way, then what could
be solution to this issue.

<persistence-unit name="PersistenceUnit1">
		<jta-data-source>jdbc/db2connection</jta-data-source>
		<class>mypack.src.Policy</class>
		<class>mypack.src.Zone</class>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>
		<validation-mode>NONE</validation-mode>
		<properties>
			 <!-- Create the database tables on startup -->
			<property name="openjpa.jdbc.SynchronizeMappings" value=
"buildSchema(ForeignKeys=true)"/>
			<property name="openjpa.Log" value="DefaultLevel=ERROR"/>
			<property name="openjpa.jdbc.DBDictionary" value="db2"/>
			<property name="openjpa.Multithreaded" value="true"/>
    			<property name="openjpa.jdbc.TransactionIsolation"
value="read-committed" />
		</properties>
	</persistence-unit>



<persistence-unit name="PersistenceUnit2">
		<jta-data-source>jdbc/db2connection</jta-data-source>
		<class>mycustom.src.CustomPolicy</class>
		<class>mypack.src.Policy</class>
		<exclude-unlisted-classes>true</exclude-unlisted-classes>
		<validation-mode>NONE</validation-mode>
		<properties>
			 <!-- Create the database tables on startup -->
			<property name="openjpa.jdbc.SynchronizeMappings" value=
"buildSchema(ForeignKeys=true)"/>
			<property name="openjpa.Log" value="DefaultLevel=ERROR"/>
			<property name="openjpa.jdbc.DBDictionary" value="db2"/>
			<property name="openjpa.Multithreaded" value="true"/>
			<property name="openjpa.jdbc.TransactionIsolation"
value="read-committed" />
		</properties>
	</persistence-unit>


Regards,
Akash



From:	Rick Curtis <cu...@gmail.com>
To:	users <us...@openjpa.apache.org>,
Date:	10/22/2013 12:42 AM
Subject:	Re: JPA exception while persistence into database



> That entity has a field associated with another entity. Both these
entities belong to different persistence units.
You can't persist a relationship from an Entity to another Entity that
belongs in a different persistence units. An EntityManager will only
operate against Entities that are a part of it's persistence unit
definition. Do you truly have two different persistence units, or do you
just have two different EntityManagers?



On Mon, Oct 21, 2013 at 11:50 AM, Akash Gunjal <ak...@in.ibm.com> wrote:

> Hi,
>
> I am trying to persist an entity into the database. That entity has a
field
> associated with another entity. Both these entities belong to different
> persistence units. When trying to persist the entity I get the below
error.
>
> > Invalid parameter - Encountered unmanaged object
> "com.ibm.powersc.ts.policies.vlan.persistence.VLANPolicy@40004000" in
life
> cycle state  unmanaged while cascading persistence via field
> "com.ibm.sc.core.persistence.Zone.policies<element:class
> com.ibm.sc.core.persistence.Policy>" 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().
>
>
> I tried to give cascade.All option to the field having entity reference,
> then I get an error message "This entity is not managed by this context".
>
> Regards,
> Akash
>
>


--
*Rick Curtis*



Re: JPA exception while persistence into database

Posted by Rick Curtis <cu...@gmail.com>.
> That entity has a field associated with another entity. Both these
entities belong to different persistence units.
You can't persist a relationship from an Entity to another Entity that
belongs in a different persistence units. An EntityManager will only
operate against Entities that are a part of it's persistence unit
definition. Do you truly have two different persistence units, or do you
just have two different EntityManagers?



On Mon, Oct 21, 2013 at 11:50 AM, Akash Gunjal <ak...@in.ibm.com> wrote:

> Hi,
>
> I am trying to persist an entity into the database. That entity has a field
> associated with another entity. Both these entities belong to different
> persistence units. When trying to persist the entity I get the below error.
>
> > Invalid parameter - Encountered unmanaged object
> "com.ibm.powersc.ts.policies.vlan.persistence.VLANPolicy@40004000" in life
> cycle state  unmanaged while cascading persistence via field
> "com.ibm.sc.core.persistence.Zone.policies<element:class
> com.ibm.sc.core.persistence.Policy>" 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().
>
>
> I tried to give cascade.All option to the field having entity reference,
> then I get an error message "This entity is not managed by this context".
>
> Regards,
> Akash
>
>


-- 
*Rick Curtis*