2013-11-11 2 views
0

Имея объект сущности, как показано ниже, и когда я пытаюсь удалить объект родительской сущности, я получаю «org.apache.openjpa.persistence.ArgumentException», но am не знаете, в чем причина этого исключения.JPA "org.apache.openjpa.persistence.ArgumentException" при удалении

Class Parent implements Serializable 
{ 
@ID 
@column(name="ParentKey") 
String parentKey; 

@manytomany 
@jointabel(name="Association_Parent_Child",joinColumns{ @joinColumn,@inversejoinColumn}) 
List<Child> Childs; 

} 

Below is the Child Entity 

Class Child implements Serializabe 
{ 
@ID 
@column(name="childKey") 
String childKey; 

@ManyToMany(mappedBy = "Childs", fetch = FetchType.EAGER) 
List<Parent> parents; 

@onetomany 
List<someOtherClassX> x; 

@onetomany 
List<SomeotherClassY> y; 
} 

В моем Уровне реализации DAO. У меня есть метод удаления

Parent DeletParent = new Parent(); 
DeletParent .setParentKey("ID"); 

Когда я вызываю entitymanager.remove ("DeletParent");

<openjpa-2.0.0-r422266:935683 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: 
This configuration disallows runtime optimization, but the following listed types 
were not enhanced at build time or at class load time with a javaagent: " 
com.ibm.sales.cgsp.busobj.Parent 
com.ibm.sales.cgsp.busobj.Child". 
at org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:116) 
at org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:304) 
at org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:228) 
at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:202) 
at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) 
at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:213) 
at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:42) 
at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:27) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
at java.lang.reflect.Method.invoke(Method.java:611) 
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.invokeProxyMethod(AbstractEntityManagerFactoryBean.java:376) 
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:519) 
at $Proxy15.createEntityManager(Unknown Source) 
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:233) 
at $Proxy20.contains(Unknown Source) 
at com.ibm.sales.cgsp.dao.impl.ClientStrategicGoalDAOImpl.deleteClientStrategyByGoal(ClientStrategicGoalDAOImpl.java:76) 
at com.ibm.sales.cgsp.dao.test.ClientStrategicGoalDAOTest.testDeleteClientStrategicGoal(ClientStrategicGoalDAOTest.java:83) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 
at java.lang.reflect.Method.invoke(Method.java:611) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Любые предложения. В соответствии с исключением мы должны заполнить дочерний объект. Почему мы должны заполнять дочерний объект здесь?

+0

Похоже, есть детская для родителей, и вы не можете удалить, если у вас есть ссылка. Вы хотите удалить дочерний элемент, когда родитель удален? или вы хотите сделать родительскую ссылку нулевой? – Gayathri

+0

@ Гайатри Спасибо за ответ. Я не хочу удалить дочерний элемент при удалении родителя. То, о чем я думаю, так это то, что его дочерний элемент manytomany relationship может быть сопоставлен с какой-либо другой записью. Когда вы удаляете родителя, он должен удалить из таблицы ассоциации parent_child, а затем из родительской таблицы. Пожалуйста, поправьте меня, если я ошибаюсь. – Suraj

+0

Ну, в этом случае сначала вам нужно получить всех детей, а затем связать с другим родителем и удалить родителя. – Gayathri

ответ

1

Попробуйте это в родительском:

@ManyToMany(cascade = CascadeType.DETACH) 
+0

@ManyToMany (fetch = FetchType.EAGER, cascade = CascadeType.DETACH). Я добавил это в родительском. Теперь нет исключений, но я могу видеть только отдельные запросы в моей консоли. запись удаляется – Suraj

+0

Проверьте ссылку ниже: выглядит так же, как и то, с чем вы сталкиваетесь. http://stackoverflow.com/questions/13818210/how-to-remove-relationship-between-many-to-many -table -with-jpa-and-hibernate – Gayathri

+0

Я следил за этой ссылкой. Это очень похоже на мою .. Но, используя clear(), не помогая, как и те же проблемы, его генерация выбирает только запросы, когда мы вызываем remove() – Suraj

Смежные вопросы