On Tue, Jul 7, 2015 at 6:17 AM, Gerhard Petracek <gerhard.petra...@gmail.com
> wrote:

> hi,
>
> please provide a simple demo-application (including the test) which
> illustrates the issue.
>
+1


> i tested it locally and everything looks fine (here the test fails as
> expected).
>

Me too. Work fine here. :)

>
> regards,
> gerhard
>
> http://www.irian.at
>
> Your JavaEE powerhouse -
> JavaEE Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache
> MyFaces, DeltaSpike and OpenWebBeans
>
>
>
> 2015-07-06 23:25 GMT+02:00 akm <ameh...@ford.com>:
>
> > I am seeing unexpected behavior with Cascades on relationships with
> > repositories with DeltaSpike.
> > I have tried with both v1.4.1 and v1.4.0
> >
> > I have two entities
> > Booking and Adventure
> > Booking has a OneToOne Relationship with Adventure with a CacadeType =
> > REFRESH
> >
> > *@OneToOne(cascade = CascadeType.REFRESH)*
> >     @JoinColumn(name = "ADVENTURE_NAME", referencedColumnName = "
> > ADVENTURE_NAME ")
> >     private Adventure adventure;
> >
> > I have a unit test to test that I cannot create a Booking for an
> adventure
> > that does not exist in the database.
> > *@Test*
> >   public void cannotCreateNewAdventureFromBooking() throws Exception {
> >         Booking booking = new Booking ();
> >
> >         Adventure adventure = new Adventure ("test");
> >         booking.setAdventure(adventure);
> >         this.bookingRepository.save(booking);
> >         this.bookingRepository.flush();
> >     }
> >
> >
> > I expect the test to fail with IllegalStateException that JPA throws, but
> > the repository save inserts an record in Adventure first and then inserts
> > into Booking for that Adventure.
> > *LOG-*
> > [EL Fine]: sql: Connection(-49208622)--INSERT INTO ADVENTURE
> > (ADVENTURE_NAME, DESCRIPTION, ) VALUES (?, ?)
> > [EL Fine]: sql: Connection(-49208622)-- bind => [test, null]
> > [EL Fine]: sql: Connection(-49208622)--SELECT CURRENT_TIMESTAMP()
> > [EL Fine]: sql: Connection(-49208622)--INSERT INTO BOOKING (BOOKING_ID,
> > ADVENTURE_NAME, CUST_EMAIL) VALUES (?, ?, ?)
> > [EL Fine]: sql: Connection(-49208622)-- bind => [101, test, null, null]
> >
> > I have another test that uses the EntityManager got from the repository
> to
> > persist and then the repository.flush, and I see the JPA
> > IllegalStateException buried deep within the DeltaSpike Exception.
> > *@Test*
> >   public void cannotCreateNewAdventureFromBookingJPA() throws Exception {
> >         Booking booking = new Booking ();
> >
> >         Adventure adventure = new Adventure ("test");
> >         booking.setAdventure(adventure);
> >
> >         EntityManager entityManager =
> > this.bookingRepository.getEntityManager();
> >
> >         entityManager.getTransaction().begin();
> >     *    entityManager.persist(booking);
> >         this.bookingRepository.flush();*
> > LOG-
> > org.apache.deltaspike.data.api.QueryInvocationException: Failed calling
> > Repository:
> >
> >
> [Repository=com.myApp.repository.BookingRepository,entity=com.myApp.domain.booking.Booking,method=flush,exception=class
> > org.apache.deltaspike.data.api.QueryInvocationException,message=Failed
> > calling Repository:
> >
> >
> [Repository=com.myApp.repository.BookingRepository,entity=com.myApp.domain.booking.Booking,method=flush,exception=class
> > org.apache.deltaspike.data.api.QueryInvocationException,message=Failed
> > calling Repository:
> >
> >
> [Repository=com.myApp.repository.BookingRepository,entity=com.myApp.domain.booking.Booking,method=flush,exception=class
> > java.lang.reflect.InvocationTargetException,message=null
> >         at
> >
> >
> org.apache.deltaspike.data.impl.handler.QueryHandler.invoke(QueryHandler.java:91)
> >         at
> >
> >
> org.apache.deltaspike.proxy.impl.invocation.DelegateManualInvocationHandler.proceedOriginal(DelegateManualInvocationHandler.java:46)
> >         at
> >
> >
> org.apache.deltaspike.proxy.impl.invocation.AbstractManualInvocationHandler.invoke(AbstractManualInvocationHandler.java:63)
> >         at
> >
> >
> org.apache.deltaspike.proxy.impl.invocation.DelegateManualInvocationHandler.staticInvoke(DelegateManualInvocationHandler.java:39)
> >         at
> > com.myApp.repository.BookingRepository$$DSPartialBeanProxy.flush(Unknown
> > Source)
> >         at
> >
> >
> com.myApp.domain.booking.jpa.BookingJpaRelationshipAnnotationsIntTest.cannotCreateNewAdventureFromBookingJPA(BookingJpaRelationshipAnnotationsIntTest.java:131)
> >         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:50)
> >         at
> >
> >
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> >         at
> >
> >
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$ContainerAwareMethodInvoker.invokeMethod(CdiTestRunner.java:340)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$ContainerAwareMethodInvoker.evaluate(CdiTestRunner.java:312)
> >         at
> >
> >
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> >         at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> >         at
> >
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.runChild(CdiTestRunner.java:174)
> >         at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> >         at
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> >         at
> > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> >         at
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> >         at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> >         at
> >
> >
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$BeforeClassStatement.evaluate(CdiTestRunner.java:366)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$AfterClassStatement.evaluate(CdiTestRunner.java:392)
> >         at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
> >         at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> >         at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.run(CdiTestRunner.java:141)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
> > Caused by: org.apache.deltaspike.data.api.QueryInvocationException:
> Failed
> > calling Repository:
> >
> >
> [Repository=com.myApp.repository.BookingRepository,entity=com.myApp.domain.booking.Booking,method=flush,exception=class
> > org.apache.deltaspike.data.api.QueryInvocationException,message=Failed
> > calling Repository:
> >
> >
> [Repository=com.myApp.repository.BookingRepository,entity=com.myApp.domain.booking.Booking,method=flush,exception=class
> > java.lang.reflect.InvocationTargetException,message=null
> >         at
> >
> >
> org.apache.deltaspike.data.impl.builder.DelegateQueryBuilder.execute(DelegateQueryBuilder.java:66)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.builder.QueryBuilder.executeQuery(QueryBuilder.java:63)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner$1.proceed(TransactionalQueryRunner.java:77)
> >         at
> >
> >
> org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.execute(ResourceLocalTransactionStrategy.java:133)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeTransactional(TransactionalQueryRunner.java:72)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.tx.TransactionalQueryRunner.executeQuery(TransactionalQueryRunner.java:54)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.handler.QueryHandler.invoke(QueryHandler.java:79)
> >         ... 39 more
> > Caused by: org.apache.deltaspike.data.api.QueryInvocationException:
> Failed
> > calling Repository:
> >
> >
> [Repository=com.myApp.repository.BookingRepository,entity=com.myApp.domain.booking.Booking,method=flush,exception=class
> > java.lang.reflect.InvocationTargetException,message=null
> >         at
> >
> >
> org.apache.deltaspike.data.impl.builder.DelegateQueryBuilder.invoke(DelegateQueryBuilder.java:105)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.builder.DelegateQueryBuilder.execute(DelegateQueryBuilder.java:57)
> >         ... 45 more
> > Caused by: java.lang.reflect.InvocationTargetException
> >         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.apache.deltaspike.data.impl.builder.DelegateQueryBuilder.invoke(DelegateQueryBuilder.java:117)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.builder.DelegateQueryBuilder.invoke(DelegateQueryBuilder.java:97)
> >         ... 46 more
> > *Caused by: java.lang.IllegalStateException: During synchronization a new
> > object was found through a relationship that was not marked cascade
> > PERSIST:
> > Adventure{name=test}.*
> >         at
> >
> >
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.discoverUnregisteredNewObjects(RepeatableWriteUnitOfWork.java:303)
> >         at
> >
> >
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:706)
> >         at
> >
> >
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:431)
> >         at
> >
> >
> org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:798)
> >         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.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:40)
> >         at
> >
> >
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
> >         at
> >
> >
> org.jboss.weld.proxies.EntityManager$1729017240$Proxy$_$$_WeldClientProxy.flush(Unknown
> > Source)
> >         at
> >
> >
> org.apache.deltaspike.data.impl.handler.EntityRepositoryHandler.flush(EntityRepositoryHandler.java:201)
> >         ... 52 more
> >
> > *If the second test is changed to use Entity Manager for flush too then I
> > get the expected error*
> > LOG –
> > *java.lang.IllegalStateException: During synchronization a new object was
> > found through a relationship that was not marked cascade PERSIST:
> > Adventure{name=test}.*
> >         at
> >
> >
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.discoverUnregisteredNewObjects(RepeatableWriteUnitOfWork.java:303)
> >         at
> >
> >
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:706)
> >         at
> >
> >
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:431)
> >         at
> >
> >
> org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:798)
> >         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.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:40)
> >         at
> >
> >
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
> >         at
> >
> >
> org.jboss.weld.proxies.EntityManager$1729017240$Proxy$_$$_WeldClientProxy.flush(Unknown
> > Source)
> >         at
> >
> >
> com.myApp..booking.jpa.BookingDeJpaRelationshipAnnotationsIntTest.cannotCreateNewAdventureFromBookingJPA(BookingDeJpaRelationshipAnnotationsIntTest.java:132)
> >         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:50)
> >         at
> >
> >
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> >         at
> >
> >
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$ContainerAwareMethodInvoker.invokeMethod(CdiTestRunner.java:340)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$ContainerAwareMethodInvoker.evaluate(CdiTestRunner.java:312)
> >         at
> >
> >
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> >         at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> >         at
> >
> >
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.runChild(CdiTestRunner.java:174)
> >         at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> >         at
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> >         at
> > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> >         at
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> >         at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> >         at
> >
> >
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$BeforeClassStatement.evaluate(CdiTestRunner.java:366)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner$AfterClassStatement.evaluate(CdiTestRunner.java:392)
> >         at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
> >         at org.junit.rules.RunRules.evaluate(RunRules.java:20)
> >         at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> >         at
> >
> >
> org.apache.deltaspike.testcontrol.api.junit.CdiTestRunner.run(CdiTestRunner.java:141)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
> >         at
> >
> >
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
> >
> >
> >
> >
> > --
> > View this message in context:
> >
> http://apache-deltaspike-incubator-discussions.2316169.n4.nabble.com/Cascade-persist-and-merge-with-Repository-tp4661002.html
> > Sent from the Apache DeltaSpike Incubator Discussions mailing list
> archive
> > at Nabble.com.
> >
>



-- 
Best regard,
Daniel Cunha (soro)

Reply via email to