์๋
ํ์ธ์, ์ฐ๊ฒฐ๋ ์ํฐํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ ค๊ณ ํ ๋ java.lang.UnsupportedOperationException
๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ง๋ฉดํด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ Quarkus์ ํจ๊ป ์ต๋ ์ ์ ๋ชจ๋ ๋ฐ์์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋๋ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ด์ผ ํ๋ ๋ฌธ์ #506์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๋ฅผ ์ํด ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ์ ํ๋ฉด CampaignDao#update
์ธ์คํด์ค์์ด ๋ฐฉ๋ฒ Schedule
์ ์ฐ๊ด๋ Campaign
Schedule
์ธ์คํด์ค๋ฅผ ์์๋๋ก ์ ์ฅ๋ฉ๋๋ค. Schedule
์ธ์คํด์ค๊ฐ Campaign
์ ์ฐ๊ฒฐ๋๊ณ ์ง์๋ ํ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ํ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
examples
ํด๋์์ ์์ ๊ตฌํ์ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ์ฐ๊ฒฐ๋ ์ํฐํฐ๋ฅผ ์
๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ํฌํจํ ์๋ ์์ต๋๋ค.
javax.persistence.PersistenceException: org.hibernate.HibernateException: javax.persistence.PersistenceException: org.hibernate.HibernateException: java.lang.UnsupportedOperationException
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$doFlush$34(ReactiveSessionImpl.java:879) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930) ~[?:?]
at java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:946) ~[?:?]
at java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2266) ~[?:?]
at java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.doFlush(ReactiveSessionImpl.java:874) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.reactiveFlush(ReactiveSessionImpl.java:856) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.mutiny.impl.MutinySessionImpl.lambda$flush$0(MutinySessionImpl.java:57) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21) ~[smallrye-context-propagation-1.1.0.jar:?]
at io.smallrye.mutiny.operators.uni.builders.UniCreateFromCompletionStage.subscribe(UniCreateFromCompletionStage.java:24) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniRunSubscribeOn.lambda$subscribe$0(UniRunSubscribeOn.java:27) ~[mutiny-0.14.0.jar:?]
at org.hibernate.reactive.mutiny.impl.MutinySessionFactoryImpl.lambda$new$1(MutinySessionFactoryImpl.java:53) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at io.smallrye.mutiny.operators.uni.UniRunSubscribeOn.subscribe(UniRunSubscribeOn.java:25) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOnItemTransform.subscribe(UniOnItemTransform.java:22) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.performInnerSubscription(UniOnItemTransformToUni.java:81) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.onItem(UniOnItemTransformToUni.java:57) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.onItem(UniOnItemTransformToUni.java:60) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.builders.DefaultUniEmitter.complete(DefaultUniEmitter.java:36) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.groups.UniOnNull.lambda$failWith$1(UniOnNull.java:43) ~[mutiny-0.14.0.jar:?]
at io.smallrye.context.impl.wrappers.SlowContextualBiConsumer.accept(SlowContextualBiConsumer.java:21) ~[smallrye-context-propagation-1.1.0.jar:?]
at io.smallrye.mutiny.groups.UniOnItem.lambda$transformToUni$5(UniOnItem.java:281) ~[mutiny-0.14.0.jar:?]
at io.smallrye.context.impl.wrappers.SlowContextualConsumer.accept(SlowContextualConsumer.java:21) ~[smallrye-context-propagation-1.1.0.jar:?]
at io.smallrye.mutiny.operators.uni.builders.UniCreateWithEmitter.subscribe(UniCreateWithEmitter.java:22) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.performInnerSubscription(UniOnItemTransformToUni.java:81) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOnItemTransformToUni$UniOnItemTransformToUniProcessor.onItem(UniOnItemTransformToUni.java:57) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.UniOperatorProcessor.onItem(UniOperatorProcessor.java:36) ~[mutiny-0.14.0.jar:?]
at io.smallrye.mutiny.operators.uni.builders.UniCreateFromCompletionStage$CompletionStageUniSubscription.forwardResult(UniCreateFromCompletionStage.java:63) ~[mutiny-0.14.0.jar:?]
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) ~[?:?]
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) ~[?:?]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) ~[?:?]
at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) ~[?:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:127) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:123) ~[asyncutil-0.1.0.jar:?]
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) ~[?:?]
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) ~[?:?]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) ~[?:?]
at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) ~[?:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:127) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:123) ~[asyncutil-0.1.0.jar:?]
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) ~[?:?]
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) ~[?:?]
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) ~[?:?]
at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) ~[?:?]
at org.hibernate.reactive.pool.impl.Handlers.lambda$toCompletionStage$0(Handlers.java:26) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at io.vertx.sqlclient.impl.SqlResultHandler.complete(SqlResultHandler.java:98) ~[vertx-sql-client-3.9.5.jar:3.9.5]
at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:87) ~[vertx-sql-client-3.9.5.jar:3.9.5]
at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:33) ~[vertx-sql-client-3.9.5.jar:3.9.5]
at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:241) ~[vertx-sql-client-3.9.5.jar:3.9.5]
at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:88) ~[vertx-sql-client-3.9.5.jar:3.9.5]
at io.vertx.core.net.impl.NetSocketImpl.lambda$new$2(NetSocketImpl.java:101) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:237) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:127) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:357) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229) ~[vertx-core-3.9.5.jar:3.9.5]
at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163) ~[vertx-core-3.9.5.jar:3.9.5]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.49.Final.jar:?]
at io.vertx.pgclient.impl.codec.PgEncoder.lambda$write$0(PgEncoder.java:78) ~[vertx-pg-client-3.9.5.jar:3.9.5]
at io.vertx.pgclient.impl.codec.PgCommandCodec.handleReadyForQuery(PgCommandCodec.java:138) ~[vertx-pg-client-3.9.5.jar:3.9.5]
at io.vertx.pgclient.impl.codec.PgDecoder.decodeReadyForQuery(PgDecoder.java:226) ~[vertx-pg-client-3.9.5.jar:3.9.5]
at io.vertx.pgclient.impl.codec.PgDecoder.channelRead(PgDecoder.java:86) ~[vertx-pg-client-3.9.5.jar:3.9.5]
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.49.Final.jar:?]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) ~[netty-transport-4.1.49.Final.jar:4.1.49.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) ~[netty-transport-4.1.49.Final.jar:4.1.49.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.49.Final.jar:4.1.49.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.49.Final.jar:4.1.49.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.49.Final.jar:4.1.49.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.49.Final.jar:4.1.49.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.49.Final.jar:4.1.49.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.49.Final.jar:4.1.49.Final]
at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: org.hibernate.HibernateException: javax.persistence.PersistenceException: org.hibernate.HibernateException: java.lang.UnsupportedOperationException
... 87 more
Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: java.lang.UnsupportedOperationException
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:914) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.internal.SessionImpl.removeOrphanBeforeUpdates(SessionImpl.java:880) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.reactive.engine.impl.Cascade.cascadeLogicalOneToOneOrphanRemoval(Cascade.java:359) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.cascadeProperty(Cascade.java:272) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.cascadeInternal(Cascade.java:195) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.lambda$cascade$2(Cascade.java:117) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.engine.impl.Cascade.cascade(Cascade.java:111) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.cascadeOnFlush(AbstractReactiveFlushingEventListener.java:293) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.lambda$prepareEntityFlushes$4(AbstractReactiveFlushingEventListener.java:137) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.util.impl.CompletionStages.lambda$loop$5(CompletionStages.java:169) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at com.ibm.asyncutil.iteration.AsyncTrampoline.lambda$asyncWhile$1(AsyncTrampoline.java:209) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:119) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.trampoline(AsyncTrampoline.java:101) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.access$200(AsyncTrampoline.java:84) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline.asyncWhile(AsyncTrampoline.java:192) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline.asyncWhile(AsyncTrampoline.java:209) ~[asyncutil-0.1.0.jar:?]
at org.hibernate.reactive.util.impl.CompletionStages.loop(CompletionStages.java:169) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.util.impl.CompletionStages.loop(CompletionStages.java:199) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.prepareEntityFlushes(AbstractReactiveFlushingEventListener.java:134) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.flushEverythingToExecutions(AbstractReactiveFlushingEventListener.java:96) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.DefaultReactiveFlushEventListener.reactiveOnFlush(DefaultReactiveFlushEventListener.java:41) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$fire$44(ReactiveSessionImpl.java:1066) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.fire(ReactiveSessionImpl.java:1066) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.doFlush(ReactiveSessionImpl.java:872) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
... 80 more
Caused by: org.hibernate.HibernateException: java.lang.UnsupportedOperationException
at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:914) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.internal.SessionImpl.removeOrphanBeforeUpdates(SessionImpl.java:880) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.reactive.engine.impl.Cascade.cascadeLogicalOneToOneOrphanRemoval(Cascade.java:359) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.cascadeProperty(Cascade.java:272) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.cascadeInternal(Cascade.java:195) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.lambda$cascade$2(Cascade.java:117) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.engine.impl.Cascade.cascade(Cascade.java:111) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.cascadeOnFlush(AbstractReactiveFlushingEventListener.java:293) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.lambda$prepareEntityFlushes$4(AbstractReactiveFlushingEventListener.java:137) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.util.impl.CompletionStages.lambda$loop$5(CompletionStages.java:169) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at com.ibm.asyncutil.iteration.AsyncTrampoline.lambda$asyncWhile$1(AsyncTrampoline.java:209) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:119) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.trampoline(AsyncTrampoline.java:101) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.access$200(AsyncTrampoline.java:84) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline.asyncWhile(AsyncTrampoline.java:192) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline.asyncWhile(AsyncTrampoline.java:209) ~[asyncutil-0.1.0.jar:?]
at org.hibernate.reactive.util.impl.CompletionStages.loop(CompletionStages.java:169) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.util.impl.CompletionStages.loop(CompletionStages.java:199) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.prepareEntityFlushes(AbstractReactiveFlushingEventListener.java:134) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.flushEverythingToExecutions(AbstractReactiveFlushingEventListener.java:96) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.DefaultReactiveFlushEventListener.reactiveOnFlush(DefaultReactiveFlushEventListener.java:41) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$fire$44(ReactiveSessionImpl.java:1066) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.fire(ReactiveSessionImpl.java:1066) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.doFlush(ReactiveSessionImpl.java:872) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
... 80 more
Caused by: java.lang.UnsupportedOperationException
at org.hibernate.reactive.event.impl.DefaultReactiveDeleteEventListener.onDelete(DefaultReactiveDeleteEventListener.java:75) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:93) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:904) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.internal.SessionImpl.removeOrphanBeforeUpdates(SessionImpl.java:880) ~[hibernate-core-5.4.29.Final.jar:5.4.29.Final]
at org.hibernate.reactive.engine.impl.Cascade.cascadeLogicalOneToOneOrphanRemoval(Cascade.java:359) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.cascadeProperty(Cascade.java:272) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.cascadeInternal(Cascade.java:195) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.engine.impl.Cascade.lambda$cascade$2(Cascade.java:117) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.engine.impl.Cascade.cascade(Cascade.java:111) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.cascadeOnFlush(AbstractReactiveFlushingEventListener.java:293) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.lambda$prepareEntityFlushes$4(AbstractReactiveFlushingEventListener.java:137) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.util.impl.CompletionStages.lambda$loop$5(CompletionStages.java:169) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at com.ibm.asyncutil.iteration.AsyncTrampoline.lambda$asyncWhile$1(AsyncTrampoline.java:209) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:119) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.trampoline(AsyncTrampoline.java:101) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.access$200(AsyncTrampoline.java:84) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline.asyncWhile(AsyncTrampoline.java:192) ~[asyncutil-0.1.0.jar:?]
at com.ibm.asyncutil.iteration.AsyncTrampoline.asyncWhile(AsyncTrampoline.java:209) ~[asyncutil-0.1.0.jar:?]
at org.hibernate.reactive.util.impl.CompletionStages.loop(CompletionStages.java:169) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.util.impl.CompletionStages.loop(CompletionStages.java:199) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.prepareEntityFlushes(AbstractReactiveFlushingEventListener.java:134) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.AbstractReactiveFlushingEventListener.flushEverythingToExecutions(AbstractReactiveFlushingEventListener.java:96) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.event.impl.DefaultReactiveFlushEventListener.reactiveOnFlush(DefaultReactiveFlushEventListener.java:41) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$fire$44(ReactiveSessionImpl.java:1066) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) ~[?:?]
at java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:143) ~[?:?]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.fire(ReactiveSessionImpl.java:1066) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.doFlush(ReactiveSessionImpl.java:872) ~[hibernate-reactive-core-1.0.0.CR1.jar:1.0.0.CR1]
... 80 more
<strong i="7">@ApplicationScoped</strong>
public class CampaignDao {
public Uni<Campaign> update(final Campaign update) {
final Function<Campaign, Uni<? extends Campaign>> updateFunc = entity -> {
entity.setSchedule(new ExecutionDate().setStart(OffsetDateTime.now()));
return session.flush().onItem().transform(ignore -> entity);
};
return session.find(Campaign.class, update.getId())
.onItem().ifNotNull().transformToUni(updateFunc);
}
}
<strong i="11">@Entity</strong>
public class Campaign implements Serializable {
@OneToOne(mappedBy = "campaign", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
<strong i="12">@JsonIgnore</strong>
private Schedule schedule;
// Getters and setters
}
<strong i="16">@Entity</strong>
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "schedule_type", discriminatorType = DiscriminatorType.STRING)
public abstract class Schedule implements Serializable {
<strong i="17">@Id</strong>
@Column(name = "id")
private String id = UUID.randomUUID().toString();
<strong i="18">@OneToOne</strong>
@JoinColumn(name = "campaign_id")
<strong i="19">@JsonIgnore</strong>
private Campaign campaign;
// Getters and setters
}
<strong i="23">@Entity</strong>
@DiscriminatorValue("EXECUTION_DATE")
public class ExecutionDate extends Schedule {
@Column(name = "start_date")
private OffsetDateTime start;
// Getters and setters
}
@blafond ์ด๊ฒ ์ข
์
@DavidD
setSchedule(...)
ํ๋ฌ์ ํ ์กฐ์ธ๋ ์ํฐํฐ ์ด ์ฐธ์กฐ( a new Schedule
)๋ฅผ ์ ๊ฑฐํ๋ ํธ๋ฆฌ๊ฑฐ๋ deleteReactive(...)
๋๋ฌธ์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฌํํ๋ ํ
์คํธ ๋ฅผ ๋ง๋ค์์ต๋๋ค.
LazyOneToOneWithJoinColumnTest.java์ ๋ก์ปฌ๋ก ํ ์คํธ๋ฅผ ์ถ๊ฐํ์ง๋ง ์์ธ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค.
2๊ฐ์ ์ํฐํฐ ์ธํธ ๊ฐ์๋ ๋ช ๊ฐ์ง ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์คํจํ ํ ์คํธ ์ํฐํฐ์๋ ์ผ๋ถ ์์์ด ํฌํจ๋ฉ๋๋ค.
setSchedule(....)
๋์ ORM ์ง์์ฑ์ ํ์ธํ๋ ํ
์คํธ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ต๋๋ค. ์
๋ฐ์ดํธ๋ ์ํฐํฐ๋ฅผ ์ฐพ์ง ๋ชปํด ๋ค๋ฅด๊ฒ ์คํจํฉ๋๋ค.
ORM์ ๋ฌธ์ ๋ Campaign์ ์
๋ฐ์ดํธํ๊ณ ์์ง๋ง ๋ณ๊ฒฝ์ ์ํํ ๋ ๋ถ๋ฆฌ๋๋ค๋ ๊ฒ์
๋๋ค.
์ด ๋ณ๊ฒฝ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค.
<strong i="7">@Test</strong>
public void testUpdateExecutionDateWithORM(TestContext context) {
Session session = ormFactory.openSession();
session.beginTransaction();
Campaign campaign = session.getReference( Campaign.class, theCampaign.getId() );
campaign.setSchedule( new ExecutionDate( OffsetDateTime.now(), "BETA" ) );
session.getTransaction().commit();
session.close();
Stage.Session stageSession = openSession();
test( context, stageSession.find( Campaign.class, campaign.getId() )
.thenAccept( entityFound -> context.assertEquals(
campaign.getSchedule().getCodeName(),
entityFound.getSchedule().getCodeName()
) )
);
}
๋ ๋์:
Campaign campaign = session.getReference(theCampaign);
๋๋ ์ด๊ฒ์ ์๋ํ๊ณ -- ์ -- ์์ธ๊ฐ ์ฌ๋ผ์ก์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ Schedule
๊ด๊ณ๋ฅผ ์
๋ฐ์ดํธํ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ์ด ์์ฑ๋ฉ๋๋ค.
์ด๊ฒ์ ๋ด ์ฝ๋์ ๋๋ค.
return session.withTransaction(transaction -> {
final Campaign campaign = session.getReference(Campaign.class, update.getId());
campaign.setSchedule(new ExecutionDate().setStart(OffsetDateTime.now()));
return Uni.createFrom().item(campaign);
});
ํ ์คํธ์์๋ ์ฌํํ ์ ์์ต๋๊น?
์๋ ์์ธ๋ ์ Schedule
์ฝ์
ํ๊ธฐ ์ ์ Schedule
์ํฐํฐ๋ฅผ ์ญ์ ํ๋ ์๋ชป๋ ๊ฒฝ๋ก๋ฅผ ๋ํ๋
๋๋ค. ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ๋ฌ ํ๋ ์ค๋ช
ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก UnsupportedOperationException์ ์ฌํํ ์ ์์ผ๋ฉฐ ๋ฒ๊ทธ์ ๋๋ค.
@Thomodachi , ๋ฐ๋ณต ์ฝ์
์ ๋ํ ์ง๋ฌธ์ ๋ํด. ์ด๋ ํธ๋์ญ์
์ ์ปค๋ฐํ ํ ์ธ์
์ ์ง์ฐ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ํฐํฐ๋ ์ธ์
์ ์ฐ๊ฒฐ๋ ์ํ๋ก ์ ์ง๋๊ณ Hibernate๋ ์์๋๋ก Schedule
์ ๋ํ ์ญ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ง ์์ต๋๋ค.
session.clear()
๋ฅผ ์ถ๊ฐํ๋ฉด ์์๋๋ UnsupportedOperation
๋ฒ๊ทธ๊ฐ ํ์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ํด ์์
ํ๊ณ ์์ผ๋ฉฐ ๊ณง ์์ ๋์ด์ผ ํฉ๋๋ค.
@DavidD
ReactiveSessionImpl ๋ฐ ์ ๋ฐ์ดํธ๋ ํ ์คํธ ํด๋์ค์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋ ์ ๋ถ๊ธฐ 702 ์์ ์ฌํญ์ ํธ์ํ์ต๋๋ค.
removeOrphanBeforeUpdates(...)
๋ํ ์ฌ์ ์๋ฅผ ํฌํจํ์ต๋๋ค. ๋น๊ณต๊ฐ logRemoveOrphanBeforeUpdates(...)
ํ์ง๋ง ์ฌํ ๋์์ ์ํด ํด๋น ๋ก๊น
์ด ํ์ํ์ง ์ฌ๋ถ๋ฅผ ๋ชจ๋ฅด์ญ๋๊น?
@blafond ๋๋ถ์ ์์ ์ด ๋๋ฌด ๋ณต์กํ์ง ์์ ๊ฒ ๊ฐ์ง๋ง ์ถ๊ฐํ ๋ฉ์๋๊ฐ ๋ฐ์ํ์ธ์ง ํ์ธํด์ผ ํ๋ฉฐ ORM ํ ์คํธ๋ฅผ ์ ์งํ ํ์๋ ์์ต๋๋ค.
session.clear()๋ฅผ ์ถ๊ฐํ๋ฉด ์์๋๋ UnsupportedOperation ๋ฒ๊ทธ๊ฐ ํ์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ํด ์์ ํ๊ณ ์์ผ๋ฉฐ ๊ณง ์์ ๋์ด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ์ค์ ๋ก ํ๋ ธ์ต๋๋ค. session.clear
๋ ํ์ํ์ง ์์ง๋ง ์ด๊ฒ์ด ์๋ฐฉํฅ ์ฐ๊ฒฐ์ด๊ธฐ ๋๋ฌธ์ ์์ชฝ์ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
return session.withTransaction(transaction -> {
final Campaign campaign = session.getReference(Campaign.class, update.getId());
campaign.getSchedule().setCampaign(null);
campaign.setSchedule(new ExecutionDate().setStart(OffsetDateTime.now()));
return Uni.createFrom().item(campaign);
});
setSchedule
๊ฐ ๊ตฌํ๋๋ ๋ฐฉ์์ ์ด์ ์ผ์ ์ ์ ๊ฑฐํ์ง ์๊ณ ์ ์ผ์ ๋ง ์ถ๊ฐํฉ๋๋ค.
@DavidD๋ , 1.0.0.CR4๊ฐ ์ธ์ ์ถ์๋ ์์ ์ธ๊ฐ์? 1.0.0.CR3์๋ ์ ์ฉ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ์ ๋ํ ์์ ์ฌํญ์ด ํฌํจ๋ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
๊ณง :-)
ORM 5.4.31.Final์ ์ถ์๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.