You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Adme Admirolas <ad...@gmail.com> on 2012/03/25 18:09:45 UTC

JPA insertion order

Hello,

I'm facing problems, when I persist JPA entities. Here is scenario:

I'm using CDI, and inject EntityManager and UserTransaction into named
bean. I have entity, that we can call MainEntity. It has 2
"@ManyToOne(optional = false, fetch = LAZY, cascade = { PERSIST, REFRESH
})" relationship to other entities, lets call them MinorEntity. So, when i
commit UserTransaction, the JPA first of all inserts Main, then
MinorEntity, and then try to update MainEntity table again. The problem is,
that i have not null constraint on database.
I googled a little bit, and found that i should use OpenJPA @ForeignKey
annotation, to force OpenJPA first of all insert MinorEntity. But this
didn't helped to me, the insert order is still incorrect.

The strangest thing, is that i have unit test, that tries to simulate this
situation using Resource Local transaction type. And it does not fails.

What I'm doing wrong? Is there need, to do some additional Geronimo app
server configuration?

Here is persistence.xml of container managed persistence context:

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
> http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>     <persistence-unit name="PRNUBEMJPA" transaction-type="JTA">
>
> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>         <jta-data-source>jdbc/PRNUBEM</jta-data-source>
>         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
>         <validation-mode>AUTO</validation-mode>
>         <properties>
>             <property name="openjpa.jdbc.Schema" value="PRNUBEM"/>
>             <property name="openjpa.jdbc.DBDictionary"
> value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
>             <property name="openjpa.Log" value="DefaultLevel=WARN,
> Runtime=INFO, Tool=INFO, SQL=TRACE"/>
>             <property name="openjpa.ConnectionFactoryProperties"
> value="printParameters=true"/>
>             <property name="openjpa.InverseManager" value="true"/>
>         </properties>
>     </persistence-unit>
> </persistence>
>


And here is persistence.xml of resource local persistence context:

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
> http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>     <persistence-unit name="PRNUBEMJPA" transaction-type="RESOURCE_LOCAL">
>
>  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
>         <validation-mode>AUTO</validation-mode>
>         <properties>
>             <property name="openjpa.ConnectionURL"
>                 value="jdbc:db2://localhost:50000/PRNUBEM" />
>             <property name="openjpa.ConnectionDriverName"
>                 value="com.ibm.db2.jcc.DB2Driver" />
>             <property name="openjpa.ConnectionUserName" value="****" />
>             <property name="openjpa.ConnectionPassword" value="***" />
>             <property name="openjpa.jdbc.Schema" value="PRNUBEM"/>
>             <property name="openjpa.jdbc.DBDictionary"
> value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
>             <property name="openjpa.Log" value="DefaultLevel=WARN,
> Runtime=INFO, Tool=INFO, SQL=TRACE"/>
>             <property name="openjpa.ConnectionFactoryProperties"
> value="printParameters=true"/>
>             <property name="openjpa.InverseManager" value="true"/>
>         </properties>
>
>     </persistence-unit>
> </persistence>
>


Please help, because if I will not be able to solve this soon, I will be
forced to move to some another JPA implementation, or even another APP
server.

Admirolas

Re: JPA insertion order

Posted by Ivan <xh...@gmail.com>.
I am thinking that this is not Geronimo specific issue, forward your email
to openjpa user mail list, there are many experts there :-)

2012/3/26 Adme Admirolas <ad...@gmail.com>

> Hello,
>
> I'm facing problems, when I persist JPA entities. Here is scenario:
>
> I'm using CDI, and inject EntityManager and UserTransaction into named
> bean. I have entity, that we can call MainEntity. It has 2
> "@ManyToOne(optional = false, fetch = LAZY, cascade = { PERSIST, REFRESH
> })" relationship to other entities, lets call them MinorEntity. So, when i
> commit UserTransaction, the JPA first of all inserts Main, then
> MinorEntity, and then try to update MainEntity table again. The problem is,
> that i have not null constraint on database.
> I googled a little bit, and found that i should use OpenJPA @ForeignKey
> annotation, to force OpenJPA first of all insert MinorEntity. But this
> didn't helped to me, the insert order is still incorrect.
>
> The strangest thing, is that i have unit test, that tries to simulate this
> situation using Resource Local transaction type. And it does not fails.
>
> What I'm doing wrong? Is there need, to do some additional Geronimo app
> server configuration?
>
> Here is persistence.xml of container managed persistence context:
>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>     <persistence-unit name="PRNUBEMJPA" transaction-type="JTA">
>>
>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>         <jta-data-source>jdbc/PRNUBEM</jta-data-source>
>>         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
>>         <validation-mode>AUTO</validation-mode>
>>         <properties>
>>             <property name="openjpa.jdbc.Schema" value="PRNUBEM"/>
>>             <property name="openjpa.jdbc.DBDictionary"
>> value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
>>             <property name="openjpa.Log" value="DefaultLevel=WARN,
>> Runtime=INFO, Tool=INFO, SQL=TRACE"/>
>>             <property name="openjpa.ConnectionFactoryProperties"
>> value="printParameters=true"/>
>>             <property name="openjpa.InverseManager" value="true"/>
>>         </properties>
>>     </persistence-unit>
>> </persistence>
>>
>
>
> And here is persistence.xml of resource local persistence context:
>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>     <persistence-unit name="PRNUBEMJPA" transaction-type="RESOURCE_LOCAL">
>>
>>  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
>>         <validation-mode>AUTO</validation-mode>
>>         <properties>
>>             <property name="openjpa.ConnectionURL"
>>                 value="jdbc:db2://localhost:50000/PRNUBEM" />
>>             <property name="openjpa.ConnectionDriverName"
>>                 value="com.ibm.db2.jcc.DB2Driver" />
>>             <property name="openjpa.ConnectionUserName" value="****" />
>>             <property name="openjpa.ConnectionPassword" value="***" />
>>             <property name="openjpa.jdbc.Schema" value="PRNUBEM"/>
>>             <property name="openjpa.jdbc.DBDictionary"
>> value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
>>             <property name="openjpa.Log" value="DefaultLevel=WARN,
>> Runtime=INFO, Tool=INFO, SQL=TRACE"/>
>>             <property name="openjpa.ConnectionFactoryProperties"
>> value="printParameters=true"/>
>>             <property name="openjpa.InverseManager" value="true"/>
>>         </properties>
>>
>>     </persistence-unit>
>> </persistence>
>>
>
>
> Please help, because if I will not be able to solve this soon, I will be
> forced to move to some another JPA implementation, or even another APP
> server.
>
> Admirolas
>



-- 
Ivan

Re: JPA insertion order

Posted by Ivan <xh...@gmail.com>.
I am thinking that this is not Geronimo specific issue, forward your email
to openjpa user mail list, there are many experts there :-)

2012/3/26 Adme Admirolas <ad...@gmail.com>

> Hello,
>
> I'm facing problems, when I persist JPA entities. Here is scenario:
>
> I'm using CDI, and inject EntityManager and UserTransaction into named
> bean. I have entity, that we can call MainEntity. It has 2
> "@ManyToOne(optional = false, fetch = LAZY, cascade = { PERSIST, REFRESH
> })" relationship to other entities, lets call them MinorEntity. So, when i
> commit UserTransaction, the JPA first of all inserts Main, then
> MinorEntity, and then try to update MainEntity table again. The problem is,
> that i have not null constraint on database.
> I googled a little bit, and found that i should use OpenJPA @ForeignKey
> annotation, to force OpenJPA first of all insert MinorEntity. But this
> didn't helped to me, the insert order is still incorrect.
>
> The strangest thing, is that i have unit test, that tries to simulate this
> situation using Resource Local transaction type. And it does not fails.
>
> What I'm doing wrong? Is there need, to do some additional Geronimo app
> server configuration?
>
> Here is persistence.xml of container managed persistence context:
>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>     <persistence-unit name="PRNUBEMJPA" transaction-type="JTA">
>>
>> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>         <jta-data-source>jdbc/PRNUBEM</jta-data-source>
>>         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
>>         <validation-mode>AUTO</validation-mode>
>>         <properties>
>>             <property name="openjpa.jdbc.Schema" value="PRNUBEM"/>
>>             <property name="openjpa.jdbc.DBDictionary"
>> value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
>>             <property name="openjpa.Log" value="DefaultLevel=WARN,
>> Runtime=INFO, Tool=INFO, SQL=TRACE"/>
>>             <property name="openjpa.ConnectionFactoryProperties"
>> value="printParameters=true"/>
>>             <property name="openjpa.InverseManager" value="true"/>
>>         </properties>
>>     </persistence-unit>
>> </persistence>
>>
>
>
> And here is persistence.xml of resource local persistence context:
>
> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>>     <persistence-unit name="PRNUBEMJPA" transaction-type="RESOURCE_LOCAL">
>>
>>  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>>         <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
>>         <validation-mode>AUTO</validation-mode>
>>         <properties>
>>             <property name="openjpa.ConnectionURL"
>>                 value="jdbc:db2://localhost:50000/PRNUBEM" />
>>             <property name="openjpa.ConnectionDriverName"
>>                 value="com.ibm.db2.jcc.DB2Driver" />
>>             <property name="openjpa.ConnectionUserName" value="****" />
>>             <property name="openjpa.ConnectionPassword" value="***" />
>>             <property name="openjpa.jdbc.Schema" value="PRNUBEM"/>
>>             <property name="openjpa.jdbc.DBDictionary"
>> value="org.apache.openjpa.jdbc.sql.DB2Dictionary" />
>>             <property name="openjpa.Log" value="DefaultLevel=WARN,
>> Runtime=INFO, Tool=INFO, SQL=TRACE"/>
>>             <property name="openjpa.ConnectionFactoryProperties"
>> value="printParameters=true"/>
>>             <property name="openjpa.InverseManager" value="true"/>
>>         </properties>
>>
>>     </persistence-unit>
>> </persistence>
>>
>
>
> Please help, because if I will not be able to solve this soon, I will be
> forced to move to some another JPA implementation, or even another APP
> server.
>
> Admirolas
>



-- 
Ivan