Hibernate-reactive: рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдЖрд▓рд╕реА рд╕рдВрдЧреНрд░рд╣ рд▓рд╛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рдорд╛рд░реНрдЪ 2021  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: hibernate/hibernate-reactive

рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рд╕рд╛рде рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдПрдХ рдПрд╕реЛрд╕рд┐рдПрд╢рди рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдбреЗрдЯрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЕрд▓рдЧ рд╕рддреНрд░ рдореЗрдВ рдлрд╝реЗрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд╣реА рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЙрд╕реА рд╕рддреНрд░ рдореЗрдВ рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рдмрд╛рдж рдареАрдХ рд╣реЛ рд░рд╣рд╛ рд╣реИ), рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕рддреНрд░реЛрдВ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░
рдПрд╕реЛрд╕рд┐рдПрд╢рди рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

2021-03-12 09:56:23,634 ERROR [org.jbo.res.rea.com.cor.AbstractResteasyReactiveContext] (vert.x-eventloop-thread-2) Request failed: org.hibernate.LazyInitializationException: Collection cannot be initialized: com.example.Author.books
    at org.hibernate.reactive.session.impl.ReactiveSessionImpl.initializeCollection(ReactiveSessionImpl.java:330)
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:589)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:264)
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:585)
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:149)
    at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:178)
    at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:163)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:264)
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:162)
    at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:371)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.takeCollectionSizeSnapshot(LazyAttributeLoadingInterceptor.java:160)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.lambda$loadAttribute$0(LazyAttributeLoadingInterceptor.java:110)
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementHelper.performWork(EnhancementHelper.java:130)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.loadAttribute(LazyAttributeLoadingInterceptor.java:76)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.fetchAttribute(LazyAttributeLoadingInterceptor.java:72)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.handleRead(LazyAttributeLoadingInterceptor.java:53)
    at org.hibernate.bytecode.enhance.spi.interceptor.AbstractInterceptor.readObject(AbstractInterceptor.java:153)
    at com.example.Author.$$_hibernate_read_books(Author.java)
    at com.example.Author.getBooks(Author.java:43)
    at com.example.TestResource.lambda$getBooks$2(TestResource.java:61)
    at io.smallrye.mutiny.operators.UniOnItemTransformToUni.invokeAndSubstitute(UniOnItemTransformToUni.java:31)
    at io.smallrye.mutiny.operators.UniOnItemTransformToUni$2.onItem(UniOnItemTransformToUni.java:74)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.lambda$onItem$1(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.context.impl.wrappers.SlowContextualExecutor.execute(SlowContextualExecutor.java:19)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.onItem(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.mutiny.operators.UniSerializedSubscriber.onItem(UniSerializedSubscriber.java:85)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.lambda$onItem$1(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.context.impl.wrappers.SlowContextualExecutor.execute(SlowContextualExecutor.java:19)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.onItem(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.mutiny.operators.UniDelegatingSubscriber.onItem(UniDelegatingSubscriber.java:24)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.lambda$onItem$1(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.context.impl.wrappers.SlowContextualExecutor.execute(SlowContextualExecutor.java:19)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.onItem(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.mutiny.operators.UniSerializedSubscriber.onItem(UniSerializedSubscriber.java:85)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.lambda$onItem$1(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.context.impl.wrappers.SlowContextualExecutor.execute(SlowContextualExecutor.java:19)
    at io.smallrye.mutiny.context.ContextPropagationUniInterceptor$1.onItem(ContextPropagationUniInterceptor.java:31)
    at io.smallrye.mutiny.operators.uni.builders.UniCreateFromCompletionStage.lambda$forwardFromCompletionStage$1(UniCreateFromCompletionStage.java:30)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
    at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:127)
    at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:123)
    at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
    at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
    at org.hibernate.reactive.pool.impl.Handlers.lambda$toCompletionStage$0(Handlers.java:26)
    at io.vertx.sqlclient.impl.SqlResultHandler.complete(SqlResultHandler.java:98)
    at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:87)
    at io.vertx.sqlclient.impl.SqlResultHandler.handle(SqlResultHandler.java:33)
    at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:241)
    at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:88)
    at io.vertx.core.net.impl.NetSocketImpl.lambda$new$2(NetSocketImpl.java:101)
    at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:237)
    at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:127)
    at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:357)
    at io.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366)
    at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43)
    at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229)
    at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
    at io.vertx.pgclient.impl.codec.PgEncoder.lambda$write$0(PgEncoder.java:78)
    at io.vertx.pgclient.impl.codec.PgCommandCodec.handleReadyForQuery(PgCommandCodec.java:138)
    at io.vertx.pgclient.impl.codec.PgDecoder.decodeReadyForQuery(PgDecoder.java:226)
    at io.vertx.pgclient.impl.codec.PgDecoder.channelRead(PgDecoder.java:86)
    at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗрд╡рд╛рд▓рд╛

https://github.com/markusdlugi/hibernate-reactive-lazy-fetching

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо:

  1. infrastructure/docker-compose.yml рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред
  2. mvn quarkus:dev рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  3. рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ: POST http://localhost:8080/test/working ред
    3.1. рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рддрд╛рдмреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
  4. рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ: GET http://localhost:8080/test/failing/1 (рдпрд╛ рдЕрдиреНрдп рд▓реЗрдЦрдХ рдЖрдИрдбреА POST http://localhost:8080/test/failing рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)ред
    4.1 рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
  • рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕рдВрд╕реНрдХрд░рдг: 1.12.2ред рдЕрдВрддрд┐рдо
  • рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг: 1.0.0.Beta4 (рдорд╛рд╡реЗрди рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдХреЗ 1.0.0.CR1 рдХреЗ рд╕рд╛рде рднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛, рд╡рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░)
  • рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЛрд░ рд╕рдВрд╕реНрдХрд░рдг: 5.4.28ред рдЕрдВрддрд┐рдо (5.4.29 рдХреЗ рд╕рд╛рде рднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдорд╛рд╡реЗрди рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдХреЗ рдЕрдВрддрд┐рдо, рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдмрд╕ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрдЧреНрд░рд╣ рдЕрдм рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж :рдореБрд╕реНрдХрд╛рди :

рд╕рднреА 30 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

/рд╕реАрд╕реА @DavidD @gavinking

рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдХрд░рдирд╛ рд╕рд╣реА рдерд╛: рдЬреЗрдкреАрдП рдореЗрдВ рдПрдХ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрдИ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдЙрдкрдпреЛрдЧ рдкреИрдЯрд░реНрди рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк saveOrUpdate() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдХреЛ рд╕реАрдзреЗ рдкреБрди: рд╕рдВрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЗрдкреАрдП рдореЗрдВ рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ merge() рдСрдкрд░реЗрд╢рди рд╣реИред

(рдФрд░ рдЗрд╕рдХреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВред рдЕрдиреБрднрд╡ рдпрд╣ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦреБрдж рдХреЛ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред)

рдЪреВрдВрдХрд┐ рдПрдХ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдИрдЖрдИрдЖрд░рд╕реА, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ StatelessSession рдореЗрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рдВрдЧрдд рд╣реИред рдПрдХ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдп @gavinking , рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рддреЛ рдореИрдВрдиреЗ рдЬреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╡рд╣ рд╡рд╣реА рдерд╛ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:

session.find(Author.class, authorId)
    .chain(author -> Mutiny.fetch(author.getBooks()));

рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЕрдЧрд░ рд▓реЗрдЦрдХ рдФрд░ рдЙрд╕рдХреА рдХрд┐рддрд╛рдмреЗрдВ рдПрдХ рд╣реА рд╕рддреНрд░ (рдпрд╛рдиреА, рдПрдХ рд╣реА HTTP рдЕрдиреБрд░реЛрдз рдореЗрдВ) рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдПрдХ рдФрд░ рд╕рддреНрд░ (рдпрд╛рдиреА, рдПрдХ рдФрд░ рдЕрдиреБрд░реЛрдз) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рддреЛ рдЖрдк рдпрд╣ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЗрд░рд╛рджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдХрдо рд╕реЗ рдХрдо "рд╕рд╛рдорд╛рдиреНрдп" (рд╕реНрдЯреЗрдЯрдлреБрд▓?) рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП? рдпрд╣ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рддреНрд░ рдореЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрд▓рд╕реА рд╕рдВрдШреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрдШреЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП StatelessSession рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдирдП рд╕рддреНрд░ рдореЗрдВ рдЖрдкрдХреЛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░-рдмрд╛рдзреНрдп рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getReference() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдорд╛рдирдХ рдЬреЗрдкреАрдП рдореЙрдбрд▓ рд╣реИ, рдПрдЪрдЖрд░ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ getReference() рдУрд╡рд░рд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИред

@gavinking рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдРрд╕рд╛ рдХреБрдЫ рд╣реИ?

Author reference = session.getReference( Author.class, authorId );
return Mutiny.fetch( reference.getBooks() );

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдФрд░ рднреА рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдЖрдк рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд▓реЗрдЦрдХ рдХреЛ рд╕реАрдзреЗ getReference() рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЙрди рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреЗ рджрдпрд╛рд▓реБ рд╣реЛрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдпрд╣рд╛рдБ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

https://github.com/markusdlugi/hibernate-reactive-lazy-fetching/blob/f3458eee969d7c3597560aaf8a646b7aad2ee9b0/src/main/java/com/example/TestResource.java#L55 -L79

getReference() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

2021-03-12 14:17:51,381 ERROR [org.jbo.res.rea.ser.cor.ExceptionMapping] (vert.x-eventloop-thread-10) Request failed : java.lang.NullPointerException
    at org.hibernate.engine.internal.AbstractEntityEntry.overwriteLoadedStateCollectionValue(AbstractEntityEntry.java:336)
    at org.hibernate.persister.entity.AbstractEntityPersister.initializeLazyProperty(AbstractEntityPersister.java:1144)
    at org.hibernate.persister.entity.AbstractEntityPersister.initializeEnhancedEntityUsedAsProxy(AbstractEntityPersister.java:4497)
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor.forceInitialize(EnhancementAsProxyLazinessInterceptor.java:221)
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor.lambda$handleRead$0(EnhancementAsProxyLazinessInterceptor.java:133)
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementHelper.performWork(EnhancementHelper.java:130)
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementAsProxyLazinessInterceptor.handleRead(EnhancementAsProxyLazinessInterceptor.java:98)
    at org.hibernate.bytecode.enhance.spi.interceptor.AbstractInterceptor.readObject(AbstractInterceptor.java:153)
    at com.example.Author.$$_hibernate_read_books(Author.java)
    at com.example.Author.getBooks(Author.java:43)
    at com.example.TestResource.getBooksUsingReference(TestResource.java:69)
    ...

StatelessSession рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдиреНрдп рд╕реБрдЭрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

2021-03-12 14:21:11,840 ERROR [org.jbo.res.rea.ser.cor.ExceptionMapping] (vert.x-eventloop-thread-5) Request failed : org.hibernate.LazyInitializationException: Unable to perform requested lazy initialization [com.example.Author.books] - no session and settings disallow loading outside the Session
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementHelper.throwLazyInitializationException(EnhancementHelper.java:199)
    at org.hibernate.bytecode.enhance.spi.interceptor.EnhancementHelper.performWork(EnhancementHelper.java:89)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.loadAttribute(LazyAttributeLoadingInterceptor.java:76)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.fetchAttribute(LazyAttributeLoadingInterceptor.java:72)
    at org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor.handleRead(LazyAttributeLoadingInterceptor.java:53)
    at org.hibernate.bytecode.enhance.spi.interceptor.AbstractInterceptor.readObject(AbstractInterceptor.java:153)
    at com.example.Author.$$_hibernate_read_books(Author.java)
    at com.example.Author.getBooks(Author.java:43)
    at com.example.TestResource.lambda$getBooksUsingStatelessSession$3(TestResource.java:78)
    ...

рдореИрдВ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рдЗрдЯрдХреЛрдб рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ

@ рдбреЗрд╡рд┐рдб рдбреА , рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдореИрдВрдиреЗ рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдХреЗрд╡рд▓ session-example рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ред рдХреЗрд╡рд▓ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдФрд░ рд╕рд╛рджреЗ рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ find() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ getReference() рдпрд╛ StatelessSession рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рд╣реА рд╣реЛрддреА рджрд┐рдЦ рд░рд╣реА рд╣реИред

рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдореЗрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдмрд╛рдЗрдЯрдХреЛрдб рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИред
рдореБрдЭреЗ рдЕрднреА рднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЧреБрдгреЛрдВ рдХрд╛ рдХреМрди рд╕рд╛ рд╕реЗрдЯ рдХреЗрд╡рд▓ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдЬ рднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛

рдореИрдВ рдЕрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. hibernate.bytecode.allow_enhancement_as_proxy рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
  2. SessionFactoryOptions#enableCollectionInDefaultFetchGroup рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕реЗ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/hibernate/hibernate-reactive/blob/a3f4c61eef71baab8ca321da5af0bfb9052bde4b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/ReactiveSession.javaory #L27

@gavinking рдХреНрдпрд╛ рдореИрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдореЗрдВ рд╕рд╣реА рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ enableCollectionInDefaultFetchGroup рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИ? рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рд╕рдордп рдореБрдЭреЗ рдкреВрд░рд╛ рдорд╛рдорд▓рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ (рдореИрдВрдиреЗ #374 рдЕрдВрдХ рдкрд░ рдмрд╛рддрдЪреАрдд рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ)

рдЙрдоред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЗрдЪ рд╕рдореВрд╣ рдореЗрдВ рд░рдЦрдирд╛ рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрднреА рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдмрдирд╛рддрд╛ рд╣реИред

n рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕рдХреНрд╖рдо рдХреЛрд▓реЗрдХреНрд╢рдирдЗрдирдбрд┐рдлреЙрд▓реНрдЯFetchGroup рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рд╛рдБ, рдореЗрд░рд╛ рдорддрд▓рдм is set to true рд▓рд┐рдЦрдирд╛ рдерд╛ред рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕рдордп :-)

рдЖрд╣ рдареАрдХ рд╣реИ :-) рдПрдХ рдмреНрд░реЗрдХ рд▓реЗ рд▓реЛ :-)

@ рдбреЗрд╡рд┐рдб рдбреА рдпрд╣ рдХреБрдЫ рдмреЗрд╣рддрд░реАрди рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реИрдВ, рдзрдиреНрдпрд╡рд╛рдж :)

рдмрд╕ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ #374 рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╣рд╛рдЗрдмрд░рдиреЗрдЯ/рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рдУрдЖрд░рдПрдо#3558 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ enableCollectionInDefaultFetchGroup рдЬрд╛рдирдмреВрдЭрдХрд░ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ false рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдпрд╣реА рдПрдХрддреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

https://github.com/hibernate/hibernate-orm/pull/3558#issuecomment -695003875

рд╡реИрд╕реЗ рднреА, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ true рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ FastBootReactiveEntityManagerFactoryBuilder рдореЗрдВ рдЕрдкреБрд╖реНрдЯ рд╣реИ:

https://github.com/quarkusio/quarkus/blob/55cf15173ff7b2985a8422de050d1c9c708be57c/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/boot/FastBootReactiveEntity.ja

рдФрд░ рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдУрдЖрд░рдПрдо рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрднреА рднреА false рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕рдордЭрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдо рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреЗрд╡рд▓ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдХреНрдпреЛрдВ рджреЗрдЦрддреЗ рд╣реИрдВред

@Sanne рдХреЛ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдлрд┐рдХреНрд╕ рдмрдирд╛рдЙрдВрдЧрд╛ рдФрд░ рдлрд┐рд░ рдХрд░реВрдВрдЧрд╛

рдЦреИрд░ рдореИрдВ рдЬреЛ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдУрдЖрд░рдПрдо рдХреЛ рдпрд╣реА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЕрдЧрд░ рд╣рдореЗрдВ рдирд┐рдпрдорд┐рдд рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкрд░ рдХрджрдо рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдорд╣рд╛рди рдЦреЛрдЬ, рдзрдиреНрдпрд╡рд╛рджред рд╣рд╛рдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди ("рдирд┐рдпрдорд┐рдд" рдФрд░ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓") рдЕрддреНрдпрдзрд┐рдХ рдпреБрдЧреНрдорд┐рдд рдПрдЯреАрдПрдо рд╣реИрдВред

рдЙрдиреНрд╣реЗрдВ рдареАрдХ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣рдбрд╝рдмрдбрд╝реА рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

(рдУрдЯреАрдУрдПрдЪ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдУрдЖрд░рдПрдо рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА; рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рджрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред)

рдЙрд╣реВрдВ рдареАрдХ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рджреЛрдиреЛрдВ рдУрдЖрд░рдПрдо (рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ) рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред

@gavinking , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖рдХ рдЧрд▓рдд рд╣реИ, рд╣реИ рдирд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп enableCollectionInDefaultFetchGroup рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рд╕рдВрд╡рд░реНрджреНрдзрди рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ :)

рдЖрд╣ рд╣рд╛рдБ, рдЬрд╝рд░реВрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреБрдо рд╕рд╣реА рд╣реЛред

рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕ рдмрдЧ рдХреЛ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рджреЗрдЦрддреЗ рд╣реИрдВ?

рд╣рд╛рдВ, рдЗрд╕ рдмрдЧ рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред @ рдбреЗрд╡рд┐рдб рдбреА рдХреЛ рд╕рд╛рджреЗ рдПрдЪрдЖрд░ (рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреЗ рдмрд┐рдирд╛) рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЬрд╝рд░реВрд░ред

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдЪрдЖрд░ рдореЗрдВ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЬрд╛рди-рдмреВрдЭрдХрд░ рдЙрд╕ "рдбрд┐рдлреЙрд▓реНрдЯ рдлрд╝реЗрдЪ рдЧреНрд░реБрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣" рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдПрдЪрдЖрд░ рдореЗрдВ рд╣рд░ рд╕рдордп рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рддреЛ рдмрдЧ рдХреНрд╡рд╛рд░реНрдХрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

(рдпрд╛, рдпрдХреАрдирди, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрд░ рдореЗрдВред)

рдореИрдВрдиреЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рднреЗрдЬрд╛ рд╣реИ: https://github.com/quarkusio/quarkus/pull/15818
getReference рдЗрд╕ рд╕рдордп рдХреНрд╡рд╛рд░реНрдХрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ

рдмрд╕ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрдЧреНрд░рд╣ рдЕрдм рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рдж :рдореБрд╕реНрдХрд╛рди :

рдзрдиреНрдпрд╡рд╛рдж @markusdlugi

рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @markusdlugi

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

aguibert picture aguibert  ┬╖  28рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tsegismont picture tsegismont  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DavideD picture DavideD  ┬╖  17рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akoufa picture akoufa  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Xset-s picture Xset-s  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ