[ http://issues.apache.org/jira/browse/OPENJPA-39?page=comments#action_12432316 ] Megan commented on OPENJPA-39: ------------------------------
I have tried all 3 options but I am getting the same error. Could you review if my configuration is correct 1. Using the org.apache.openjpa.persistence.ForeignKey annotation (maybe I need more than adding @ForeignKey annotation) JpaChild.java: @ManyToOne(optional=false) @JoinColumn(name="ParentId", nullable=false) @ForeignKey private JpaParent parent = null; 2. Setting the "openjpa.jdbc.SchemaFactory" property <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0"> <persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>openjpa.model.JpaParent</class> <class>openjpa.model.JpaChild</class> <properties> <property name="openjpa.jdbc.DBDictionary" value="sqlserver"/> <property name="openjpa.ConnectionDriverName" value="weblogic.jdbc.sqlserver.SQLServerDriver"/> <property name="openjpa.ConnectionURL" value="jdbc:bea:sqlserver://hostname:1433;databaseName=dbname"/> <property name="openjpa.ConnectionUserName" value="username"/> <property name="openjpa.ConnectionPassword" value="password"/> <property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/> <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> </properties> </persistence-unit> </persistence> 3. Setting the "openjpa.jdbc.MappingDefaults" property <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0"> <persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>openjpa.model.JpaParent</class> <class>openjpa.model.JpaChild</class> <properties> <property name="openjpa.jdbc.DBDictionary" value="sqlserver"/> <property name="openjpa.ConnectionDriverName" value="weblogic.jdbc.sqlserver.SQLServerDriver"/> <property name="openjpa.ConnectionURL" value="jdbc:bea:sqlserver://hostname:1433;databaseName=dbname"/> <property name="openjpa.ConnectionUserName" value="username"/> <property name="openjpa.ConnectionPassword" value="password"/> <property name="openjpa.jdbc.MappingDefaults" value="jpa(ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict)"/> <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> </properties> </persistence-unit> </persistence> > Cascade delete does not work with foreign key constraints > --------------------------------------------------------- > > Key: OPENJPA-39 > URL: http://issues.apache.org/jira/browse/OPENJPA-39 > Project: OpenJPA > Issue Type: Bug > Components: jpa > Environment: Microsoft SQL Server 2000 > Windows XP > Java SE 1.5 > OpenJPA - source downloaded Aug 28, 2006) > Show ยป > Microsoft SQL Server 2000 Windows XP Java SE 1.5 OpenJPA - source downloaded > today (Aug 14, 2006) > Reporter: Megan > Priority: Minor > Attachments: testcase.zip > > > Removing a parent object in OneToMany with cascade=CascadeType.ALL raises > foreign key constraints exception > JpaParent.java > @OneToMany(mappedBy="parent", cascade=CascadeType.ALL) > private Set<JpaChild> children = new HashSet<JpaChild>(); > JpaChild.java > @ManyToOne(optional=false) > @JoinColumn(name="ParentId", nullable=false) > private JpaParent parent = null; > // This raises the following exception. If foreign key is removed, it works > OK (Maybe I have to let OpenJPA know about foreign key constraints) > JpaParent parent = em.find(JpaParent.class, 1); > em.remove(parent); > <2|true|0.9.0-incubating-SNAPSHOT> > org.apache.openjpa.persistence.RollbackException: The transaction has been > rolled back. See the nested exceptions for details on the errors that > occurred. > at > org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:371) > at openjpa.test.BaseTestCase.destroyTestCase(BaseTestCase.java:82) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74) > at > org.junit.internal.runners.BeforeAndAfterRunner.runAfters(BeforeAndAfterRunner.java:65) > at > org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:37) > at > org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75) > at > org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45) > at > org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71) > at > org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35) > at > org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) > at > org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) > at > org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) > Caused by: <0|true|0.9.0-incubating-SNAPSHOT> > 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:2028) > at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1876) > at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1772) > at > org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1706) > at > org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:76) > at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1271) > at > org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:831) > at > org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:360) > ... 21 more > Caused by: <0|false|0.9.0-incubating-SNAPSHOT> > org.apache.openjpa.persistence.PersistenceException: [BEA][SQLServer JDBC > Driver][SQLServer]DELETE statement conflicted with COLUMN REFERENCE > constraint 'JpaChild_Parent_FK'. The conflict occurred in database 'pocdb', > table 'JpaChild', column 'ParentId'. {prepstmnt 32048085 DELETE FROM > JpaParent WHERE Id = ? AND OptLock = ? [params=(int) 1, (int) 1]} [code=547, > state=23000] > FailedObject: openjpa.model.JpaParent-1 > at > org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3701) > at > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:94) > at > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64) > at > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:103) > at > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:68) > at > org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flushPrimaryRow(OperationOrderUpdateManager.java:158) > at > org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java:86) > at > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:88) > at > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:68) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:512) > at > org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:127) > ... 28 more > Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: [BEA][SQLServer > JDBC Driver][SQLServer]DELETE statement conflicted with COLUMN REFERENCE > constraint 'JpaChild_Parent_FK'. The conflict occurred in database 'pocdb', > table 'JpaChild', column 'ParentId'. {prepstmnt 32048085 DELETE FROM > JpaParent WHERE Id = ? AND OptLock = ? [params=(int) 1, (int) 1]} [code=547, > state=23000] > at > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:186) > at > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:53) > at > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:839) > at > org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:266) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1359) > at > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:92) > ... 35 more -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
