You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Sebastian Gauder <se...@denkwerk.com> on 2008/04/22 10:37:04 UTC
OpenJPA 1.0.2 and PostgreSQL 8.2 - OneToMany-Problem
Hey,
I'm trying to persist the following code:
Company c = new Company();
c.setId( (long)i );
c.setName( "Company "+i );
c.setCustomers( new HashSet<Customer>() );
for ( int j = 0; j < 5; j++ ) {
Customer cus = new Customer();
cus.setId( 100L*i+j );
cus.setName( "Customer" + 100L*i+j );
cus.setCompany(c);
c.getCustomers().add(cus);
}
em.persist(c);
em.flush();
with these entities:
@Entity
@Table(name = "JBT_Company")
public class Company {
protected Long id;
public void setId(Long inId) {
this.id = inId;
}
@Id
public Long getId() {
return id;
}
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected Set<Customer> customerSet;
@OneToMany(mappedBy = "company",cascade = CascadeType.ALL)
public Set<Customer> getCustomers() {
return customerSet;
}
public void setCustomers(Set<Customer> inCustomerSet) {
this.customerSet = inCustomerSet;
}
}
@Entity
@Table(name = "JBT_Customer")
public class Customer {
protected Long id;
public void setId(Long inId) {
this.id = inId;
}
@Id
public Long getId() {
return id;
}
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected Company company;
@ManyToOne
@JoinColumn(name = "company_id")
public Company getCompany() {
return company;
}
public void setCompany(Company inCompany) {
this.company = inCompany;
}
}
It works for MySQL, but not for PostgreSQL 8.2. The follwing Exception
is thrown:
40235 postgres INFO [RMI TCP Connection(6)-10.0.10.88]
openjpa.Runtime - Starting OpenJPA 1.0.2
40766 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 3920972> executing prepstmnt
5188636 SELECT NULL AS SEQUENCE_SCHEMA, relname AS SEQUENCE_NAME FROM
pg_class WHERE relkind='S'
40782 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 3920972> [16 ms] spent
41313 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 24050576> executing prepstmnt
17582220 DELETE FROM JBT_Customer
41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 24050576> [15 ms] spent
41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 24050576> executing prepstmnt
3724097 DELETE FROM JBT_Company
41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 24050576> [0 ms] spent
41422 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> executing prepstmnt
27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES (?, ?,
?) [params=(long) 3, (String) Customer03, (long) 0]
41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> [16 ms] spent
41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> executing prepstmnt
29204960 INSERT INTO JBT_Customer (id, name, company_id) VALUES (?, ?,
?) [params=(long) 0, (String) Customer00, (long) 0]
41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> [15 ms] spent
41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> executing prepstmnt
13540318 INSERT INTO JBT_Customer (id, name, company_id) VALUES (?, ?,
?) [params=(long) 1, (String) Customer01, (long) 0]
41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> [0 ms] spent
41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> executing prepstmnt
5978200 INSERT INTO JBT_Company (id, name) VALUES (?, ?) [params=(long)
0, (String) Company 0]
41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> [16 ms] spent
41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> executing prepstmnt
13640927 INSERT INTO JBT_Customer (id, name, company_id) VALUES (?, ?,
?) [params=(long) 4, (String) Customer04, (long) 0]
41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> [0 ms] spent
41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> executing prepstmnt
19188912 INSERT INTO JBT_Customer (id, name, company_id) VALUES (?, ?,
?) [params=(long) 2, (String) Customer02, (long) 0]
41485 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
openjpa.jdbc.SQL - <t 31001198, conn 11834918> [16 ms] spent
22.04.2008 10:12:26
org.springframework.remoting.support.RemoteInvocationTraceInterceptor invoke
WARNUNG: Processing of RmiServiceExporter remote call resulted in fatal
exception: com.denkwerk.jbt.server.spring.SpringBenchmarkBean.buildUp
<openjpa-1.0.2-r420667:627158 fatal general error>
org.apache.openjpa.persistence.PersistenceException: The transaction has
been rolled back. See the nested exceptions for details on the errors
that occurred.
at
org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2108)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1853)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1624)
at
org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
at
org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:193)
at $Proxy7.flush(Unknown Source)
at com.denkwerk.jbt.elements.benchmarks.B03.B03.buildUp(B03.java:48)
at
com.denkwerk.jbt.server.AbstractRunner.buildUp(AbstractRunner.java:21)
at
com.denkwerk.jbt.server.spring.PostgresQLBenchmarkBeanImpl.buildUp(PostgresQLBenchmarkBeanImpl.java:21)
at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy8.buildUp(Unknown Source)
at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at
org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy8.buildUp(Unknown Source)
at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
at
org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
at
org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
at
org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
at
org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: <openjpa-1.0.2-r420667:627158 nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: ERROR: insert or
update on table "jbt_customer" violates foreign key constraint
"fkf1ca16c177e66402"
Detail: Key (company_id)=(0) is not present in table "jbt_company".
{prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id)
VALUES (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]}
[code=0, state=23503]
FailedObject: com.denkwerk.jbt.elements.benchmarks.B03.Customer@13b792
at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3946)
at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
at
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
... 54 more
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR:
insert or update on table "jbt_customer" violates foreign key constraint
"fkf1ca16c177e66402"
Detail: Key (company_id)=(0) is not present in table "jbt_company".
{prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id)
VALUES (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]}
[code=0, state=23503]
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
at
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
at
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
at
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
... 61 more
NestedThrowables:
...
Seems, that OpenJPA has Problems with the order of INSERT Statements ?!?
Sebastian
Re: OpenJPA 1.0.2 and PostgreSQL 8.2 - OneToMany-Problem
Posted by Sebastian Gauder <se...@denkwerk.com>.
Sorry, I forgot to persist before flushing, this one works:
Company c = new Company();
c.setId( (long)i );
c.setName( "Company "+i );
c.setCustomers( new HashSet<Customer>() );
em.persist( c );
em.flush();
for ( int j = 0; j < 5; j++ ) {
Customer cus = new Customer();
cus.setId( 100L*i+j );
cus.setName( "Customer" + 100L*i+j );
cus.setCompany( c );
c.getCustomers().add( cus );
}
em.merge( c );
em.flush();
Sebastian
Rajeev Jha schrieb:
> Idea is to flush the parent table data before attempting to flush the
> child table that uses parent table ID as FK. flush() on entity should
> work in your case too.
>
> On Tue, Apr 22, 2008 at 3:14 PM, Sebastian Gauder
> <se...@denkwerk.com> wrote:
>
>> Ok, this seems a known issue.
>>
>> I tried that additional flush() you mentioned, and debugged it. OpenJPA
>> seems to ignore it, The INSERT-Statement for Company is not executed until
>> the second flush()...
>>
>> Sebastian
>>
>>
>> Rajeev Jha schrieb:
>>
>>
>>
>>
>>> https://issues.apache.org/jira/browse/OPENJPA-235
>>>
>>> On Tue, Apr 22, 2008 at 2:07 PM, Sebastian Gauder
>>> <se...@denkwerk.com> wrote:
>>>
>>>
>>>
>>>> Hey,
>>>>
>>>> I'm trying to persist the following code:
>>>>
>>>> Company c = new Company();
>>>> c.setId( (long)i );
>>>> c.setName( "Company "+i );
>>>> c.setCustomers( new HashSet<Customer>() );
>>>> for ( int j = 0; j < 5; j++ ) {
>>>> Customer cus = new Customer();
>>>> cus.setId( 100L*i+j );
>>>> cus.setName( "Customer" + 100L*i+j );
>>>> cus.setCompany(c);
>>>> c.getCustomers().add(cus);
>>>> }
>>>> em.persist(c);
>>>> em.flush();
>>>>
>>>>
>>>> with these entities:
>>>>
>>>> @Entity
>>>> @Table(name = "JBT_Company")
>>>> public class Company {
>>>>
>>>> protected Long id;
>>>>
>>>> public void setId(Long inId) {
>>>> this.id = inId;
>>>> }
>>>>
>>>> @Id
>>>> public Long getId() {
>>>> return id;
>>>> }
>>>>
>>>> protected String name;
>>>>
>>>> public String getName() {
>>>> return name;
>>>> }
>>>>
>>>> public void setName(String name) {
>>>> this.name = name;
>>>> }
>>>>
>>>> protected Set<Customer> customerSet;
>>>>
>>>> @OneToMany(mappedBy = "company",cascade = CascadeType.ALL)
>>>> public Set<Customer> getCustomers() {
>>>> return customerSet;
>>>> }
>>>>
>>>> public void setCustomers(Set<Customer> inCustomerSet) {
>>>> this.customerSet = inCustomerSet;
>>>> }
>>>> }
>>>>
>>>>
>>>> @Entity
>>>> @Table(name = "JBT_Customer")
>>>> public class Customer {
>>>>
>>>> protected Long id;
>>>>
>>>> public void setId(Long inId) {
>>>> this.id = inId;
>>>> }
>>>>
>>>> @Id
>>>> public Long getId() {
>>>> return id;
>>>> }
>>>>
>>>> protected String name;
>>>>
>>>> public String getName() {
>>>> return name;
>>>> }
>>>>
>>>> public void setName(String name) {
>>>> this.name = name;
>>>> }
>>>>
>>>> protected Company company;
>>>>
>>>> @ManyToOne
>>>> @JoinColumn(name = "company_id")
>>>> public Company getCompany() {
>>>> return company;
>>>> }
>>>>
>>>> public void setCompany(Company inCompany) {
>>>> this.company = inCompany;
>>>> }
>>>> }
>>>>
>>>>
>>>> It works for MySQL, but not for PostgreSQL 8.2. The follwing Exception
>>>>
>> is
>>
>>>> thrown:
>>>>
>>>> 40235 postgres INFO [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.Runtime
>>
>>>> - Starting OpenJPA 1.0.2
>>>> 40766 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 3920972> executing prepstmnt 5188636 SELECT NULL AS
>>>> SEQUENCE_SCHEMA, relname AS SEQUENCE_NAME FROM pg_class WHERE
>>>>
>> relkind='S'
>>
>>>> 40782 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 3920972> [16 ms] spent
>>>> 41313 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 24050576> executing prepstmnt 17582220 DELETE FROM
>>>> JBT_Customer
>>>> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 24050576> [15 ms] spent
>>>> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 24050576> executing prepstmnt 3724097 DELETE FROM
>>>> JBT_Company
>>>> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 24050576> [0 ms] spent
>>>> 41422 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> executing prepstmnt 27655609 INSERT INTO
>>>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 3,
>>>> (String) Customer03, (long) 0]
>>>> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> [16 ms] spent
>>>> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> executing prepstmnt 29204960 INSERT INTO
>>>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 0,
>>>> (String) Customer00, (long) 0]
>>>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> [15 ms] spent
>>>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> executing prepstmnt 13540318 INSERT INTO
>>>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 1,
>>>> (String) Customer01, (long) 0]
>>>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> [0 ms] spent
>>>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> executing prepstmnt 5978200 INSERT INTO
>>>> JBT_Company (id, name) VALUES (?, ?) [params=(long) 0, (String) Company
>>>>
>> 0]
>>
>>>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> [16 ms] spent
>>>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> executing prepstmnt 13640927 INSERT INTO
>>>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 4,
>>>> (String) Customer04, (long) 0]
>>>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> [0 ms] spent
>>>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> executing prepstmnt 19188912 INSERT INTO
>>>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 2,
>>>> (String) Customer02, (long) 0]
>>>> 41485 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
>>>>
>> openjpa.jdbc.SQL
>>
>>>> - <t 31001198, conn 11834918> [16 ms] spent
>>>> 22.04.2008 10:12:26
>>>> org.springframework.remoting.support.RemoteInvocationTraceInterceptor
>>>>
>> invoke
>>
>>>> WARNUNG: Processing of RmiServiceExporter remote call resulted in fatal
>>>> exception: com.denkwerk.jbt.server.spring.SpringBenchmarkBean.buildUp
>>>> <openjpa-1.0.2-r420667:627158 fatal general error>
>>>> org.apache.openjpa.persistence.PersistenceException: The transaction has
>>>> been rolled back. See the nested exceptions for details on the errors
>>>>
>> that
>>
>>>> occurred.
>>>> at
>>>>
>>>>
>> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2108)
>>
>>>> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
>>>> at
>>>>
>> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1853)
>>
>>>> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1624)
>>>> at
>>>>
>>>>
>> org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
>>
>>>> at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
>>>> at
>>>>
>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>
>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>> at
>>>>
>>>>
>> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:193)
>>
>>>> at $Proxy7.flush(Unknown Source)
>>>> at com.denkwerk.jbt.elements.benchmarks.B03.B03.buildUp(B03.java:48)
>>>> at
>>>>
>> com.denkwerk.jbt.server.AbstractRunner.buildUp(AbstractRunner.java:21)
>>
>>>> at
>>>>
>>>>
>> com.denkwerk.jbt.server.spring.PostgresQLBenchmarkBeanImpl.buildUp(PostgresQLBenchmarkBeanImpl.java:21)
>>
>>>> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
>>>> at
>>>>
>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>
>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>> at
>>>>
>>>>
>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
>>
>>>> at
>>>>
>>>>
>> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>>
>>>> at $Proxy8.buildUp(Unknown Source)
>>>> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
>>>> at
>>>>
>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>
>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>> at
>>>>
>>>>
>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
>>
>>>> at
>>>>
>>>>
>> org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>>
>>>> at
>>>>
>>>>
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>>
>>>> at $Proxy8.buildUp(Unknown Source)
>>>> at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
>>>> at
>>>>
>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>
>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>> at
>>>>
>>>>
>> org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
>>
>>>> at
>>>>
>>>>
>> org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
>>
>>>> at
>>>>
>>>>
>> org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
>>
>>>> at
>>>>
>>>>
>> org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
>>
>>>> at
>>>>
>>>>
>> org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
>>
>>>> at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
>>>> at
>>>>
>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>
>>>> at java.lang.reflect.Method.invoke(Method.java:597)
>>>> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
>>>> at sun.rmi.transport.Transport$1.run(Transport.java:159)
>>>> at java.security.AccessController.doPrivileged(Native Method)
>>>> at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
>>>> at
>>>> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
>>>> at
>>>>
>>>>
>> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
>>
>>>> at
>>>>
>>>>
>> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
>>
>>>> at
>>>>
>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>>
>>>> at
>>>>
>>>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>>
>>>> at java.lang.Thread.run(Thread.java:619)
>>>> Caused by: <openjpa-1.0.2-r420667:627158 nonfatal general error>
>>>> org.apache.openjpa.persistence.PersistenceException: ERROR: insert or
>>>>
>> update
>>
>>>> on table "jbt_customer" violates foreign key constraint
>>>>
>> "fkf1ca16c177e66402"
>>
>>>> Detail: Key (company_id)=(0) is not present in table "jbt_company".
>>>> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id)
>>>>
>> VALUES
>>
>>>> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
>>>> state=23503]
>>>> FailedObject: com.denkwerk.jbt.elements.benchmarks.B03.Customer@13b792
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3946)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
>>
>>>> ... 54 more
>>>> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR:
>>>>
>> insert
>>
>>>> or update on table "jbt_customer" violates foreign key constraint
>>>> "fkf1ca16c177e66402"
>>>> Detail: Key (company_id)=(0) is not present in table "jbt_company".
>>>> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id)
>>>>
>> VALUES
>>
>>>> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
>>>> state=23503]
>>>> at
>>>>
>>>>
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
>>
>>>> at
>>>>
>>>>
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
>>
>>>> ... 61 more
>>>> NestedThrowables:
>>>> ...
>>>>
>>>> Seems, that OpenJPA has Problems with the order of INSERT Statements
>>>>
>> ?!?
>>
>>>> Sebastian
>>>>
>>>>
>>>>
>>>>
--
diplomand software-entwicklung
denkwerk gmbh | vogelsanger straße 66 | d-50823 köln
telefon +49 221 2942 100 | telefax +49 221 2942 101
GF: Axel Schmiegelow, Marco Zingler, Jochen Schlaier, Frank Zimpel
HRB 32063 Amtsgericht Köln - www.denkwerk.com
Re: OpenJPA 1.0.2 and PostgreSQL 8.2 - OneToMany-Problem
Posted by Rajeev Jha <jh...@gmail.com>.
Idea is to flush the parent table data before attempting to flush the
child table that uses parent table ID as FK. flush() on entity should
work in your case too.
On Tue, Apr 22, 2008 at 3:14 PM, Sebastian Gauder
<se...@denkwerk.com> wrote:
> Ok, this seems a known issue.
>
> I tried that additional flush() you mentioned, and debugged it. OpenJPA
> seems to ignore it, The INSERT-Statement for Company is not executed until
> the second flush()...
>
> Sebastian
>
>
> Rajeev Jha schrieb:
>
>
>
> > https://issues.apache.org/jira/browse/OPENJPA-235
> >
> > On Tue, Apr 22, 2008 at 2:07 PM, Sebastian Gauder
> > <se...@denkwerk.com> wrote:
> >
> >
> > > Hey,
> > >
> > > I'm trying to persist the following code:
> > >
> > > Company c = new Company();
> > > c.setId( (long)i );
> > > c.setName( "Company "+i );
> > > c.setCustomers( new HashSet<Customer>() );
> > > for ( int j = 0; j < 5; j++ ) {
> > > Customer cus = new Customer();
> > > cus.setId( 100L*i+j );
> > > cus.setName( "Customer" + 100L*i+j );
> > > cus.setCompany(c);
> > > c.getCustomers().add(cus);
> > > }
> > > em.persist(c);
> > > em.flush();
> > >
> > >
> > > with these entities:
> > >
> > > @Entity
> > > @Table(name = "JBT_Company")
> > > public class Company {
> > >
> > > protected Long id;
> > >
> > > public void setId(Long inId) {
> > > this.id = inId;
> > > }
> > >
> > > @Id
> > > public Long getId() {
> > > return id;
> > > }
> > >
> > > protected String name;
> > >
> > > public String getName() {
> > > return name;
> > > }
> > >
> > > public void setName(String name) {
> > > this.name = name;
> > > }
> > >
> > > protected Set<Customer> customerSet;
> > >
> > > @OneToMany(mappedBy = "company",cascade = CascadeType.ALL)
> > > public Set<Customer> getCustomers() {
> > > return customerSet;
> > > }
> > >
> > > public void setCustomers(Set<Customer> inCustomerSet) {
> > > this.customerSet = inCustomerSet;
> > > }
> > > }
> > >
> > >
> > > @Entity
> > > @Table(name = "JBT_Customer")
> > > public class Customer {
> > >
> > > protected Long id;
> > >
> > > public void setId(Long inId) {
> > > this.id = inId;
> > > }
> > >
> > > @Id
> > > public Long getId() {
> > > return id;
> > > }
> > >
> > > protected String name;
> > >
> > > public String getName() {
> > > return name;
> > > }
> > >
> > > public void setName(String name) {
> > > this.name = name;
> > > }
> > >
> > > protected Company company;
> > >
> > > @ManyToOne
> > > @JoinColumn(name = "company_id")
> > > public Company getCompany() {
> > > return company;
> > > }
> > >
> > > public void setCompany(Company inCompany) {
> > > this.company = inCompany;
> > > }
> > > }
> > >
> > >
> > > It works for MySQL, but not for PostgreSQL 8.2. The follwing Exception
> is
> > > thrown:
> > >
> > > 40235 postgres INFO [RMI TCP Connection(6)-10.0.10.88]
> openjpa.Runtime
> > > - Starting OpenJPA 1.0.2
> > > 40766 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 3920972> executing prepstmnt 5188636 SELECT NULL AS
> > > SEQUENCE_SCHEMA, relname AS SEQUENCE_NAME FROM pg_class WHERE
> relkind='S'
> > > 40782 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 3920972> [16 ms] spent
> > > 41313 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 24050576> executing prepstmnt 17582220 DELETE FROM
> > > JBT_Customer
> > > 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 24050576> [15 ms] spent
> > > 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 24050576> executing prepstmnt 3724097 DELETE FROM
> > > JBT_Company
> > > 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 24050576> [0 ms] spent
> > > 41422 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> executing prepstmnt 27655609 INSERT INTO
> > > JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 3,
> > > (String) Customer03, (long) 0]
> > > 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> [16 ms] spent
> > > 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> executing prepstmnt 29204960 INSERT INTO
> > > JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 0,
> > > (String) Customer00, (long) 0]
> > > 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> [15 ms] spent
> > > 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> executing prepstmnt 13540318 INSERT INTO
> > > JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 1,
> > > (String) Customer01, (long) 0]
> > > 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> [0 ms] spent
> > > 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> executing prepstmnt 5978200 INSERT INTO
> > > JBT_Company (id, name) VALUES (?, ?) [params=(long) 0, (String) Company
> 0]
> > > 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> [16 ms] spent
> > > 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> executing prepstmnt 13640927 INSERT INTO
> > > JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 4,
> > > (String) Customer04, (long) 0]
> > > 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> [0 ms] spent
> > > 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> executing prepstmnt 19188912 INSERT INTO
> > > JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 2,
> > > (String) Customer02, (long) 0]
> > > 41485 postgres TRACE [RMI TCP Connection(6)-10.0.10.88]
> openjpa.jdbc.SQL
> > > - <t 31001198, conn 11834918> [16 ms] spent
> > > 22.04.2008 10:12:26
> > > org.springframework.remoting.support.RemoteInvocationTraceInterceptor
> invoke
> > > WARNUNG: Processing of RmiServiceExporter remote call resulted in fatal
> > > exception: com.denkwerk.jbt.server.spring.SpringBenchmarkBean.buildUp
> > > <openjpa-1.0.2-r420667:627158 fatal general error>
> > > org.apache.openjpa.persistence.PersistenceException: The transaction has
> > > been rolled back. See the nested exceptions for details on the errors
> that
> > > occurred.
> > > at
> > >
> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2108)
> > > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
> > > at
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1853)
> > > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1624)
> > > at
> > >
> org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
> > > at
> > >
> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
> > > at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
> > > at
> > >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > at
> > >
> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:193)
> > > at $Proxy7.flush(Unknown Source)
> > > at com.denkwerk.jbt.elements.benchmarks.B03.B03.buildUp(B03.java:48)
> > > at
> com.denkwerk.jbt.server.AbstractRunner.buildUp(AbstractRunner.java:21)
> > > at
> > >
> com.denkwerk.jbt.server.spring.PostgresQLBenchmarkBeanImpl.buildUp(PostgresQLBenchmarkBeanImpl.java:21)
> > > at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
> > > at
> > >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > at
> > >
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
> > > at
> > >
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> > > at
> > >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> > > at
> > >
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
> > > at
> > >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> > > at
> > >
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> > > at $Proxy8.buildUp(Unknown Source)
> > > at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
> > > at
> > >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > at
> > >
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
> > > at
> > >
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> > > at
> > >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> > > at
> > >
> org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70)
> > > at
> > >
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> > > at
> > >
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> > > at $Proxy8.buildUp(Unknown Source)
> > > at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
> > > at
> > >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > at
> > >
> org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
> > > at
> > >
> org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
> > > at
> > >
> org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
> > > at
> > >
> org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
> > > at
> > >
> org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
> > > at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
> > > at
> > >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
> > > at sun.rmi.transport.Transport$1.run(Transport.java:159)
> > > at java.security.AccessController.doPrivileged(Native Method)
> > > at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
> > > at
> > > sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
> > > at
> > >
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
> > > at
> > >
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
> > > at
> > >
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> > > at
> > >
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> > > at java.lang.Thread.run(Thread.java:619)
> > > Caused by: <openjpa-1.0.2-r420667:627158 nonfatal general error>
> > > org.apache.openjpa.persistence.PersistenceException: ERROR: insert or
> update
> > > on table "jbt_customer" violates foreign key constraint
> "fkf1ca16c177e66402"
> > > Detail: Key (company_id)=(0) is not present in table "jbt_company".
> > > {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id)
> VALUES
> > > (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
> > > state=23503]
> > > FailedObject: com.denkwerk.jbt.elements.benchmarks.B03.Customer@13b792
> > > at
> > >
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3946)
> > > at
> > >
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
> > > at
> > >
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
> > > at
> > >
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> > > ... 54 more
> > > Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR:
> insert
> > > or update on table "jbt_customer" violates foreign key constraint
> > > "fkf1ca16c177e66402"
> > > Detail: Key (company_id)=(0) is not present in table "jbt_company".
> > > {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id)
> VALUES
> > > (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
> > > state=23503]
> > > at
> > >
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
> > > at
> > >
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
> > > at
> > >
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
> > > at
> > >
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> > > at
> > >
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
> > > at
> > >
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
> > > ... 61 more
> > > NestedThrowables:
> > > ...
> > >
> > > Seems, that OpenJPA has Problems with the order of INSERT Statements
> ?!?
> > >
> > > Sebastian
> > >
> > >
> > >
> >
>
Re: OpenJPA 1.0.2 and PostgreSQL 8.2 - OneToMany-Problem
Posted by Sebastian Gauder <se...@denkwerk.com>.
Ok, this seems a known issue.
I tried that additional flush() you mentioned, and debugged it. OpenJPA
seems to ignore it, The INSERT-Statement for Company is not executed
until the second flush()...
Sebastian
Rajeev Jha schrieb:
> https://issues.apache.org/jira/browse/OPENJPA-235
>
> On Tue, Apr 22, 2008 at 2:07 PM, Sebastian Gauder
> <se...@denkwerk.com> wrote:
>
>> Hey,
>>
>> I'm trying to persist the following code:
>>
>> Company c = new Company();
>> c.setId( (long)i );
>> c.setName( "Company "+i );
>> c.setCustomers( new HashSet<Customer>() );
>> for ( int j = 0; j < 5; j++ ) {
>> Customer cus = new Customer();
>> cus.setId( 100L*i+j );
>> cus.setName( "Customer" + 100L*i+j );
>> cus.setCompany(c);
>> c.getCustomers().add(cus);
>> }
>> em.persist(c);
>> em.flush();
>>
>>
>> with these entities:
>>
>> @Entity
>> @Table(name = "JBT_Company")
>> public class Company {
>>
>> protected Long id;
>>
>> public void setId(Long inId) {
>> this.id = inId;
>> }
>>
>> @Id
>> public Long getId() {
>> return id;
>> }
>>
>> protected String name;
>>
>> public String getName() {
>> return name;
>> }
>>
>> public void setName(String name) {
>> this.name = name;
>> }
>>
>> protected Set<Customer> customerSet;
>>
>> @OneToMany(mappedBy = "company",cascade = CascadeType.ALL)
>> public Set<Customer> getCustomers() {
>> return customerSet;
>> }
>>
>> public void setCustomers(Set<Customer> inCustomerSet) {
>> this.customerSet = inCustomerSet;
>> }
>> }
>>
>>
>> @Entity
>> @Table(name = "JBT_Customer")
>> public class Customer {
>>
>> protected Long id;
>>
>> public void setId(Long inId) {
>> this.id = inId;
>> }
>>
>> @Id
>> public Long getId() {
>> return id;
>> }
>>
>> protected String name;
>>
>> public String getName() {
>> return name;
>> }
>>
>> public void setName(String name) {
>> this.name = name;
>> }
>>
>> protected Company company;
>>
>> @ManyToOne
>> @JoinColumn(name = "company_id")
>> public Company getCompany() {
>> return company;
>> }
>>
>> public void setCompany(Company inCompany) {
>> this.company = inCompany;
>> }
>> }
>>
>>
>> It works for MySQL, but not for PostgreSQL 8.2. The follwing Exception is
>> thrown:
>>
>> 40235 postgres INFO [RMI TCP Connection(6)-10.0.10.88] openjpa.Runtime
>> - Starting OpenJPA 1.0.2
>> 40766 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 3920972> executing prepstmnt 5188636 SELECT NULL AS
>> SEQUENCE_SCHEMA, relname AS SEQUENCE_NAME FROM pg_class WHERE relkind='S'
>> 40782 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 3920972> [16 ms] spent
>> 41313 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 24050576> executing prepstmnt 17582220 DELETE FROM
>> JBT_Customer
>> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 24050576> [15 ms] spent
>> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 24050576> executing prepstmnt 3724097 DELETE FROM
>> JBT_Company
>> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 24050576> [0 ms] spent
>> 41422 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> executing prepstmnt 27655609 INSERT INTO
>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 3,
>> (String) Customer03, (long) 0]
>> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> [16 ms] spent
>> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> executing prepstmnt 29204960 INSERT INTO
>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 0,
>> (String) Customer00, (long) 0]
>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> [15 ms] spent
>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> executing prepstmnt 13540318 INSERT INTO
>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 1,
>> (String) Customer01, (long) 0]
>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> [0 ms] spent
>> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> executing prepstmnt 5978200 INSERT INTO
>> JBT_Company (id, name) VALUES (?, ?) [params=(long) 0, (String) Company 0]
>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> [16 ms] spent
>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> executing prepstmnt 13640927 INSERT INTO
>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 4,
>> (String) Customer04, (long) 0]
>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> [0 ms] spent
>> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> executing prepstmnt 19188912 INSERT INTO
>> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 2,
>> (String) Customer02, (long) 0]
>> 41485 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
>> - <t 31001198, conn 11834918> [16 ms] spent
>> 22.04.2008 10:12:26
>> org.springframework.remoting.support.RemoteInvocationTraceInterceptor invoke
>> WARNUNG: Processing of RmiServiceExporter remote call resulted in fatal
>> exception: com.denkwerk.jbt.server.spring.SpringBenchmarkBean.buildUp
>> <openjpa-1.0.2-r420667:627158 fatal general error>
>> org.apache.openjpa.persistence.PersistenceException: The transaction has
>> been rolled back. See the nested exceptions for details on the errors that
>> occurred.
>> at
>> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2108)
>> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
>> at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1853)
>> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1624)
>> at
>> org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
>> at
>> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
>> at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at
>> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:193)
>> at $Proxy7.flush(Unknown Source)
>> at com.denkwerk.jbt.elements.benchmarks.B03.B03.buildUp(B03.java:48)
>> at com.denkwerk.jbt.server.AbstractRunner.buildUp(AbstractRunner.java:21)
>> at
>> com.denkwerk.jbt.server.spring.PostgresQLBenchmarkBeanImpl.buildUp(PostgresQLBenchmarkBeanImpl.java:21)
>> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at
>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
>> at
>> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>> at
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>> at $Proxy8.buildUp(Unknown Source)
>> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at
>> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
>> at
>> org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70)
>> at
>> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
>> at
>> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
>> at $Proxy8.buildUp(Unknown Source)
>> at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at
>> org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
>> at
>> org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
>> at
>> org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
>> at
>> org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
>> at
>> org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
>> at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
>> at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:597)
>> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
>> at sun.rmi.transport.Transport$1.run(Transport.java:159)
>> at java.security.AccessController.doPrivileged(Native Method)
>> at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
>> at
>> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
>> at
>> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
>> at
>> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>> at java.lang.Thread.run(Thread.java:619)
>> Caused by: <openjpa-1.0.2-r420667:627158 nonfatal general error>
>> org.apache.openjpa.persistence.PersistenceException: ERROR: insert or update
>> on table "jbt_customer" violates foreign key constraint "fkf1ca16c177e66402"
>> Detail: Key (company_id)=(0) is not present in table "jbt_company".
>> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES
>> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
>> state=23503]
>> FailedObject: com.denkwerk.jbt.elements.benchmarks.B03.Customer@13b792
>> at
>> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3946)
>> at
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
>> at
>> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
>> at
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
>> at
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
>> at
>> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
>> at
>> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
>> at
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
>> at
>> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
>> at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
>> at
>> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
>> ... 54 more
>> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: insert
>> or update on table "jbt_customer" violates foreign key constraint
>> "fkf1ca16c177e66402"
>> Detail: Key (company_id)=(0) is not present in table "jbt_company".
>> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES
>> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
>> state=23503]
>> at
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
>> at
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
>> at
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
>> at
>> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
>> at
>> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
>> at
>> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
>> at
>> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
>> ... 61 more
>> NestedThrowables:
>> ...
>>
>> Seems, that OpenJPA has Problems with the order of INSERT Statements ?!?
>>
>> Sebastian
>>
>>
Re: OpenJPA 1.0.2 and PostgreSQL 8.2 - OneToMany-Problem
Posted by Rajeev Jha <jh...@gmail.com>.
https://issues.apache.org/jira/browse/OPENJPA-235
On Tue, Apr 22, 2008 at 2:07 PM, Sebastian Gauder
<se...@denkwerk.com> wrote:
> Hey,
>
> I'm trying to persist the following code:
>
> Company c = new Company();
> c.setId( (long)i );
> c.setName( "Company "+i );
> c.setCustomers( new HashSet<Customer>() );
> for ( int j = 0; j < 5; j++ ) {
> Customer cus = new Customer();
> cus.setId( 100L*i+j );
> cus.setName( "Customer" + 100L*i+j );
> cus.setCompany(c);
> c.getCustomers().add(cus);
> }
> em.persist(c);
> em.flush();
>
>
> with these entities:
>
> @Entity
> @Table(name = "JBT_Company")
> public class Company {
>
> protected Long id;
>
> public void setId(Long inId) {
> this.id = inId;
> }
>
> @Id
> public Long getId() {
> return id;
> }
>
> protected String name;
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> protected Set<Customer> customerSet;
>
> @OneToMany(mappedBy = "company",cascade = CascadeType.ALL)
> public Set<Customer> getCustomers() {
> return customerSet;
> }
>
> public void setCustomers(Set<Customer> inCustomerSet) {
> this.customerSet = inCustomerSet;
> }
> }
>
>
> @Entity
> @Table(name = "JBT_Customer")
> public class Customer {
>
> protected Long id;
>
> public void setId(Long inId) {
> this.id = inId;
> }
>
> @Id
> public Long getId() {
> return id;
> }
>
> protected String name;
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> protected Company company;
>
> @ManyToOne
> @JoinColumn(name = "company_id")
> public Company getCompany() {
> return company;
> }
>
> public void setCompany(Company inCompany) {
> this.company = inCompany;
> }
> }
>
>
> It works for MySQL, but not for PostgreSQL 8.2. The follwing Exception is
> thrown:
>
> 40235 postgres INFO [RMI TCP Connection(6)-10.0.10.88] openjpa.Runtime
> - Starting OpenJPA 1.0.2
> 40766 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 3920972> executing prepstmnt 5188636 SELECT NULL AS
> SEQUENCE_SCHEMA, relname AS SEQUENCE_NAME FROM pg_class WHERE relkind='S'
> 40782 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 3920972> [16 ms] spent
> 41313 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> executing prepstmnt 17582220 DELETE FROM
> JBT_Customer
> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> [15 ms] spent
> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> executing prepstmnt 3724097 DELETE FROM
> JBT_Company
> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> [0 ms] spent
> 41422 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 27655609 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 3,
> (String) Customer03, (long) 0]
> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [16 ms] spent
> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 29204960 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 0,
> (String) Customer00, (long) 0]
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [15 ms] spent
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 13540318 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 1,
> (String) Customer01, (long) 0]
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [0 ms] spent
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 5978200 INSERT INTO
> JBT_Company (id, name) VALUES (?, ?) [params=(long) 0, (String) Company 0]
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [16 ms] spent
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 13640927 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 4,
> (String) Customer04, (long) 0]
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [0 ms] spent
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 19188912 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 2,
> (String) Customer02, (long) 0]
> 41485 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [16 ms] spent
> 22.04.2008 10:12:26
> org.springframework.remoting.support.RemoteInvocationTraceInterceptor invoke
> WARNUNG: Processing of RmiServiceExporter remote call resulted in fatal
> exception: com.denkwerk.jbt.server.spring.SpringBenchmarkBean.buildUp
> <openjpa-1.0.2-r420667:627158 fatal general error>
> org.apache.openjpa.persistence.PersistenceException: The transaction has
> been rolled back. See the nested exceptions for details on the errors that
> occurred.
> at
> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2108)
> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
> at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1853)
> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1624)
> at
> org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
> at
> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
> at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:193)
> at $Proxy7.flush(Unknown Source)
> at com.denkwerk.jbt.elements.benchmarks.B03.B03.buildUp(B03.java:48)
> at com.denkwerk.jbt.server.AbstractRunner.buildUp(AbstractRunner.java:21)
> at
> com.denkwerk.jbt.server.spring.PostgresQLBenchmarkBeanImpl.buildUp(PostgresQLBenchmarkBeanImpl.java:21)
> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> at $Proxy8.buildUp(Unknown Source)
> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> at
> org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> at $Proxy8.buildUp(Unknown Source)
> at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
> at
> org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
> at
> org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
> at
> org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
> at
> org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
> at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
> at sun.rmi.transport.Transport$1.run(Transport.java:159)
> at java.security.AccessController.doPrivileged(Native Method)
> at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
> at
> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: <openjpa-1.0.2-r420667:627158 nonfatal general error>
> org.apache.openjpa.persistence.PersistenceException: ERROR: insert or update
> on table "jbt_customer" violates foreign key constraint "fkf1ca16c177e66402"
> Detail: Key (company_id)=(0) is not present in table "jbt_company".
> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES
> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
> state=23503]
> FailedObject: com.denkwerk.jbt.elements.benchmarks.B03.Customer@13b792
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3946)
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
> at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
> at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
> at
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
> at
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> ... 54 more
> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: insert
> or update on table "jbt_customer" violates foreign key constraint
> "fkf1ca16c177e66402"
> Detail: Key (company_id)=(0) is not present in table "jbt_company".
> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES
> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
> state=23503]
> at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
> at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
> at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
> at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
> at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
> ... 61 more
> NestedThrowables:
> ...
>
> Seems, that OpenJPA has Problems with the order of INSERT Statements ?!?
>
> Sebastian
>
Re: OpenJPA 1.0.2 and PostgreSQL 8.2 - OneToMany-Problem
Posted by Rajeev Jha <jh...@gmail.com>.
can you try this code? Your issue may be related to SQL re-ordering.
Company c = new Company();
c.setId( (long)i );
c.setName( "Company "+i );
c.setCustomers( new HashSet<Customer>() );
// explicit flush for company before adding relationships
em.flush();
for ( int j = 0; j < 5; j++ ) {
Customer cus = new Customer();
cus.setId( 100L*i+j );
cus.setName( "Customer" + 100L*i+j );
cus.setCompany(c);
c.getCustomers().add(cus);
}
em.persist(c);
em.flush();
Thanks
- rajeev.
On Tue, Apr 22, 2008 at 2:07 PM, Sebastian Gauder
<se...@denkwerk.com> wrote:
> Hey,
>
> I'm trying to persist the following code:
>
> Company c = new Company();
> c.setId( (long)i );
> c.setName( "Company "+i );
> c.setCustomers( new HashSet<Customer>() );
> for ( int j = 0; j < 5; j++ ) {
> Customer cus = new Customer();
> cus.setId( 100L*i+j );
> cus.setName( "Customer" + 100L*i+j );
> cus.setCompany(c);
> c.getCustomers().add(cus);
> }
> em.persist(c);
> em.flush();
>
>
> with these entities:
>
> @Entity
> @Table(name = "JBT_Company")
> public class Company {
>
> protected Long id;
>
> public void setId(Long inId) {
> this.id = inId;
> }
>
> @Id
> public Long getId() {
> return id;
> }
>
> protected String name;
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> protected Set<Customer> customerSet;
>
> @OneToMany(mappedBy = "company",cascade = CascadeType.ALL)
> public Set<Customer> getCustomers() {
> return customerSet;
> }
>
> public void setCustomers(Set<Customer> inCustomerSet) {
> this.customerSet = inCustomerSet;
> }
> }
>
>
> @Entity
> @Table(name = "JBT_Customer")
> public class Customer {
>
> protected Long id;
>
> public void setId(Long inId) {
> this.id = inId;
> }
>
> @Id
> public Long getId() {
> return id;
> }
>
> protected String name;
>
> public String getName() {
> return name;
> }
>
> public void setName(String name) {
> this.name = name;
> }
>
> protected Company company;
>
> @ManyToOne
> @JoinColumn(name = "company_id")
> public Company getCompany() {
> return company;
> }
>
> public void setCompany(Company inCompany) {
> this.company = inCompany;
> }
> }
>
>
> It works for MySQL, but not for PostgreSQL 8.2. The follwing Exception is
> thrown:
>
> 40235 postgres INFO [RMI TCP Connection(6)-10.0.10.88] openjpa.Runtime
> - Starting OpenJPA 1.0.2
> 40766 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 3920972> executing prepstmnt 5188636 SELECT NULL AS
> SEQUENCE_SCHEMA, relname AS SEQUENCE_NAME FROM pg_class WHERE relkind='S'
> 40782 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 3920972> [16 ms] spent
> 41313 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> executing prepstmnt 17582220 DELETE FROM
> JBT_Customer
> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> [15 ms] spent
> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> executing prepstmnt 3724097 DELETE FROM
> JBT_Company
> 41328 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 24050576> [0 ms] spent
> 41422 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 27655609 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 3,
> (String) Customer03, (long) 0]
> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [16 ms] spent
> 41438 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 29204960 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 0,
> (String) Customer00, (long) 0]
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [15 ms] spent
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 13540318 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 1,
> (String) Customer01, (long) 0]
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [0 ms] spent
> 41453 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 5978200 INSERT INTO
> JBT_Company (id, name) VALUES (?, ?) [params=(long) 0, (String) Company 0]
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [16 ms] spent
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 13640927 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 4,
> (String) Customer04, (long) 0]
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [0 ms] spent
> 41469 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> executing prepstmnt 19188912 INSERT INTO
> JBT_Customer (id, name, company_id) VALUES (?, ?, ?) [params=(long) 2,
> (String) Customer02, (long) 0]
> 41485 postgres TRACE [RMI TCP Connection(6)-10.0.10.88] openjpa.jdbc.SQL
> - <t 31001198, conn 11834918> [16 ms] spent
> 22.04.2008 10:12:26
> org.springframework.remoting.support.RemoteInvocationTraceInterceptor invoke
> WARNUNG: Processing of RmiServiceExporter remote call resulted in fatal
> exception: com.denkwerk.jbt.server.spring.SpringBenchmarkBean.buildUp
> <openjpa-1.0.2-r420667:627158 fatal general error>
> org.apache.openjpa.persistence.PersistenceException: The transaction has
> been rolled back. See the nested exceptions for details on the errors that
> occurred.
> at
> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2108)
> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1955)
> at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1853)
> at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1624)
> at
> org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:973)
> at
> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:488)
> at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:193)
> at $Proxy7.flush(Unknown Source)
> at com.denkwerk.jbt.elements.benchmarks.B03.B03.buildUp(B03.java:48)
> at com.denkwerk.jbt.server.AbstractRunner.buildUp(AbstractRunner.java:21)
> at
> com.denkwerk.jbt.server.spring.PostgresQLBenchmarkBeanImpl.buildUp(PostgresQLBenchmarkBeanImpl.java:21)
> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> at $Proxy8.buildUp(Unknown Source)
> at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
> at
> org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:70)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
> at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> at $Proxy8.buildUp(Unknown Source)
> at sun.reflect.GeneratedMethodAccessor36.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
> at
> org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38)
> at
> org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
> at
> org.springframework.remoting.rmi.RmiBasedExporter.invoke(RmiBasedExporter.java:72)
> at
> org.springframework.remoting.rmi.RmiInvocationWrapper.invoke(RmiInvocationWrapper.java:72)
> at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
> at sun.rmi.transport.Transport$1.run(Transport.java:159)
> at java.security.AccessController.doPrivileged(Native Method)
> at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
> at
> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> at java.lang.Thread.run(Thread.java:619)
> Caused by: <openjpa-1.0.2-r420667:627158 nonfatal general error>
> org.apache.openjpa.persistence.PersistenceException: ERROR: insert or update
> on table "jbt_customer" violates foreign key constraint "fkf1ca16c177e66402"
> Detail: Key (company_id)=(0) is not present in table "jbt_company".
> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES
> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
> state=23503]
> FailedObject: com.denkwerk.jbt.elements.benchmarks.B03.Customer@13b792
> at
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3946)
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
> at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:67)
> at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:108)
> at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
> at
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
> at
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
> at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
> at
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> ... 54 more
> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: insert
> or update on table "jbt_customer" violates foreign key constraint
> "fkf1ca16c177e66402"
> Detail: Key (company_id)=(0) is not present in table "jbt_company".
> {prepstmnt 27655609 INSERT INTO JBT_Customer (id, name, company_id) VALUES
> (?, ?, ?) [params=(long) 3, (String) Customer03, (long) 0]} [code=0,
> state=23503]
> at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
> at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800(LoggingConnectionDecorator.java:57)
> at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:858)
> at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
> at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
> ... 61 more
> NestedThrowables:
> ...
>
> Seems, that OpenJPA has Problems with the order of INSERT Statements ?!?
>
> Sebastian
>