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