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
<[EMAIL PROTECTED]> 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: [EMAIL PROTECTED]
   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

Reply via email to