Hibernate-reactive: рдЙрджрд╛рд╣рд░рдг рдУрдЖрд░рдПрдо 5.4.24 рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдирд╡ре░ 2020  ┬╖  37рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: hibernate/hibernate-reactive

org.hibernate:hibernate-core:5.5.0-SNAPSHOT:20201117.201048-196 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд▓реЙрдЧ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

Feersum Endjinn is a great book!
[ERROR] failed to execute statement [select author0_.id as id1_0_0_, author0_.name as name2_0_0_ from authors author0_ where author0_.id in (?,?)]
[ERROR] could not load an entity batch: [org.hibernate.example.reactive.Author#<1, 3>]
java.util.concurrent.CompletionException: org.hibernate.LazyInitializationException: Collection cannot be initialized: org.hibernate.example.reactive.Author.books
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:673) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:683) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2010) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:110) ~[?:1.8.0_275]
    at org.hibernate.reactive.loader.ReactiveLoaderBasedResultSetProcessor.reactiveInitializeEntitiesAndCollections(ReactiveLoaderBasedResultSetProcessor.java:150) ~[hibernate-reactive-core-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
    at org.hibernate.reactive.loader.ReactiveLoaderBasedResultSetProcessor.reactiveExtractResults(ReactiveLoaderBasedResultSetProcessor.java:83) ~[hibernate-reactive-core-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
Error: Exception in thread "main" java.util.concurrent.CompletionException: org.hibernate.LazyInitializationException: Collection cannot be initialized: org.hibernate.example.reactive.Author.books
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
    at org.hibernate.reactive.loader.ReactiveLoader.reactiveProcessResultSet(ReactiveLoader.java:123) ~[hibernate-reactive-core-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
    at org.hibernate.reactive.loader.ReactiveLoader.lambda$doReactiveQueryAndInitializeNonLazyCollections$0(ReactiveLoader.java:71) ~[hibernate-reactive-core-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
    at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:940) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) ~[?:1.8.0_275]
    at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975) ~[?:1.8.0_275]

...

Caused by: org.hibernate.LazyInitializationException: Collection cannot be initialized: org.hibernate.example.reactive.Author.books
    at org.hibernate.reactive.session.impl.ReactiveSessionImpl.initializeCollection(ReactiveSessionImpl.java:320)
    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)

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

рдУрд╣, рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ: @Sanne рдФрд░ рдореИрдВ рджреЛрдиреЛрдВ рд╕реАрдЖрдИ рдореЗрдВ рдЕрдиреНрдп рдирдХрд▓реА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдЪреВрдХ рдЧрдПред

рдореБрдЭреЗ рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ #443 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдбрд░реНрдЯреАрдЪреЗрдХрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ: https://github.com/hibernate/hibernate-reactive/issues/447

рд╡реИрд╕реЗ рднреА, рдпрд╣ рдУрдЖрд░рдПрдо 5.4.24 рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдбрд░реНрдЯреАрдЪреЗрдХрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдмрдЧ рдмреИрдЪ рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореИрдВ рдЧрд▓рдд рд╣реВрдВред

рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдбрд░реНрдЯреАрдЪреЗрдХрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдмрдЧ рдмреИрдЪ рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореИрдВ рдЧрд▓рдд рд╣реВрдВред

рдУрд╣ рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдБ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рд╣реИред

рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХреВрдВрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдРрд╕рд╛ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдмрд╛рдЗрдЯрдХреЛрдб рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ

рдареАрдХ рд╣реИ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рд╣рд╛рдВред рдмрд╛рдЗрдЯ рдХреЛрдб рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рдЧрдВрджреА рдЬрд╛рдБрдЪ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╢рд╛рдпрдж, рдУрдЖрд░рдПрдо рдореЗрдВ рдпрд╣ рдмрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЫреБрдкрд╛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЕрдм рдЬрдм рдпрд╣ рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ рд╣рдо рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред

рдЙрдлреНрдл, рдХреНрдпрд╛ рдкрд┐рдЯрд╛ рд╣реИред

OTOH, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ CollectionPersister s рднреА рдирд╣реАрдВ рд╣реИ, рддрдм рднреА рд╕рдВрдЧреНрд░рд╣ _matter_ рдХреА рдЧрдВрджреА рдЬрд╛рдБрдЪ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ?

рдпрд╣ рд╣реИ рдореБрджреНрджрд╛:

рдмрдврд╝реА рд╣реБрдИ рд╡рд┐рдзрд┐ $$_hibernate_hasDirtyAttributes рдмрджрд▓ рдЧрдИ рд╣реИ, рд╕реЗ

    public boolean $$_hibernate_hasDirtyAttributes() {
        boolean var1 = false;
        var1 = this.$$_hibernate_tracker != null && !this.$$_hibernate_tracker.isEmpty();
        return var1;
    }

рдкреНрд░рддрд┐

    public boolean $$_hibernate_hasDirtyAttributes() {
        boolean var1 = false;
        var1 = this.$$_hibernate_tracker != null && !this.$$_hibernate_tracker.isEmpty() || this.$$_hibernate_areCollectionFieldsDirty();
        return var1;
    }

    public boolean $$_hibernate_areCollectionFieldsDirty() {
        boolean var1 = false;
        if (!var1 && this.$$_hibernate_collectionTracker != null) {
            if (this.movies == null && this.$$_hibernate_collectionTracker.getSize("movies") != -1) {
                var1 = true;
            } else if (this.movies != null && this.$$_hibernate_collectionTracker.getSize("movies") != this.movies.size()) {
                var1 = true;
            }
        }

        return var1;
    }

this.movies.size() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ LazyInitializationException

movies рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЕрдВрджрд░ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХрд╛ рдирд╛рдо рд╣реИ

@ рдбреЗрд╡рд┐рдб рдбреА рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рд░рджрд░реНрд╢реА рдЖрд▓рд╕реА fetch() рдХреЙрд▓ рдЧреБрдо рд╣реИ), рдпрд╛ рдпрд╣ рдХреБрдЫ рдЧрд╣рд░рд╛ рд╣реИ?

@DavidD рдореИрдВрдиреЗ https://github.com/hibernate/hibernate-orm/pull/3645 рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ size() рдкрд░ рд╡рд╣ рдХреЙрд▓ рдореБрдЭреЗ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддреАред (рд▓реЗрдХрд┐рди рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛ред)

@ рдбреЗрд╡рд┐рдб рдбреА рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рд░рджрд░реНрд╢реА рдЖрд▓рд╕реА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рдореБрджреНрджрд╛ рд╣реИред рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХрд╣реАрдВ рд╕рдВрдЧреНрд░рд╣ рд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рд╡реИрд╕реЗ, рдЕрдЧрд░ рдореИрдВ EAGER рдлрд╝реЗрдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрд╕реЛрд╕рд┐рдПрд╢рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдБ рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХрд╣реАрдВ рд╕рдВрдЧреНрд░рд╣ рд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдЦреБрдж рдХреЛ рдордд рдорд╛рд░реЛ рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рднреА рдореБрдЭреЗ рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mappedBy рд╕рд╛рде рдПрдХ рдЧреИрд░-рдкреНрд░рд╛рдкреНрдд рдПрд╕реЛрд╕рд┐рдПрд╢рди рд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ @beikov рдФрд░ @Sanne рдХрд╛ рдХреНрдпрд╛ рдХрд╣рдирд╛ рд╣реИред

(рдУрдЯреАрдУрдПрдЪ, рднрд▓реЗ рд╣реА рдХреЛрд░ рд╕рд╣реА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ _рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ_, рд╣рдореЗрдВ рдЕрднреА рднреА рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред)

рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рд╡рд╛рд▓реА рд╢рд╛рдЦрд╛ рд╣реИ (рдЕрднреА рднреА рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ): https://github.com/DavideD/hibernate-reactive/tree/447-dirtychecking

рдкрд░реАрдХреНрд╖рдг:
https://github.com/DavideD/hibernate-reactive/blob/447-dirtychecking/it-bytecode-enhancements/src/test/java/org/hibernate/reactive/it/bytecodeenhancements/BytecodeTest.java

рд╕рдВрд╕реНрдерд╛рдПрдВ:
https://github.com/DavideD/hibernate-reactive/tree/447-dirtychecking/it-bytecode-enhancements/src/main/java/org/hibernate/reactive/it/bytecodenhancements

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

рдлрд╝рд┐рд▓реНрдореЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ != null рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЛрд░ рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрд▓рд╕реА рд╣реЛрдиреЗ рдкрд░ рдРрд╕рд╛ рд╕рдВрдЧреНрд░рд╣ рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦреИрд░, рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдереЛрдбрд╝реА рд▓рдВрдмреА рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдереАред рдПрдХ рдореБрджреНрджрд╛ рдореИрдВрдиреЗ рдЦреЛрд▓рд╛ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рддрд░реНрдХ рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ "рдбрдмрд▓-рдЖрд▓рд╕реНрдп" рдпрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдУрдЖрд░рдПрдо рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддрд░реНрдХрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдерд╛, рдФрд░ рдПрдЪрдЖрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рднреА рдмрджрддрд░ рд╕рдорд╕реНрдпрд╛ рдереА, рдЬрд╣рд╛рдВ рд▓рд╛рдиреЗ рдкрд╛рд░рджрд░реНрд╢реА рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдЖрдкрдХреЛ рдЙрд╕ рдкрд░ fetch() рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред

рдареАрдХ рд╣реИ рдорд┐рд▓ рдЧрдпрд╛ред рддреЛ рдХреНрдпрд╛ рдпрд╣ #374 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдХреНрдпрд╛ collectionsInDefaultFetchGroupEnabled рд╣рдореЗрд╢рд╛ RX рдореЗрдВ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ?

рд╣рдореНрдо, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдВрдЧреНрд░рд╣ рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ collectionsInDefaultFetchGroupEnabled рд╣рдореЗрд╢рд╛ RX рдореЗрдВ рд╕рд╣реА рд╣реЛрддрд╛ рд╣реИ?

рд╣рд╛рдБ, рдпрд╣ рд╣реИред

рд╣рдореНрдо, рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдВрдЧреНрд░рд╣ рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрдореНрдореНрдо ... рд╕рдЪ рдореЗрдВ? рд╡рд╣ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛!

collectionsInDefaultFetchGroupEnabled рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реЗрдЪ рд╕рдореВрд╣ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╣реА рд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИред

рддреЛ рдпрд╛ рддреЛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░рд╛рдм рд╣реЛ рдЧрдпрд╛, рдпрд╛ рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ рддрдм рд╕реЗ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рд╣реВрдВ рдХрд┐ рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рд╕рддрдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд░рдПрдХреНрд╕ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рд╡рд╣ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрдм рдореИрдВ рдзреНрд╡рдЬ рдХреЛ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕ рдЯреНрд░реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:585)
org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:149)
org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:178)
org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:163)
org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:264)
org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:162)
org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:371)
org.hibernate.test.bytecode.enhancement.dirty.DirtyTrackingCollectionTest$StringsEntity.$$_hibernate_removeDirtyFields(DirtyTrackingCollectionTest.java)
org.hibernate.test.bytecode.enhancement.dirty.DirtyTrackingCollectionTest$StringsEntity.$$_hibernate_clearDirtyCollectionNames(DirtyTrackingCollectionTest.java)
org.hibernate.test.bytecode.enhancement.dirty.DirtyTrackingCollectionTest$StringsEntity.$$_hibernate_clearDirtyAttributes(DirtyTrackingCollectionTest.java)
org.hibernate.tuple.entity.PojoEntityTuplizer.afterInitialize(PojoEntityTuplizer.java:228)
org.hibernate.persister.entity.AbstractEntityPersister.afterInitialize(AbstractEntityPersister.java:5093)
org.hibernate.engine.internal.TwoPhaseLoad.afterInitialize(TwoPhaseLoad.java:405)
org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.afterInitialize(AbstractRowReader.java:271)
org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:214)
org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:96)
org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105)
org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)
org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4441)
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4431)
org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:569)
org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:537)
org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)
org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:332)
org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:121)
org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1186)
org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1175)
org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:193)
org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2786)
org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2767)
org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2723)
org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2767)
org.hibernate.internal.SessionImpl.find(SessionImpl.java:3322)
org.hibernate.internal.SessionImpl.find(SessionImpl.java:3284)
org.hibernate.test.bytecode.enhancement.dirty.DirtyTrackingCollectionTest.lambda$test$1(DirtyTrackingCollectionTest.java:57)
org.hibernate.testing.transaction.TransactionUtil.doInJPA(TransactionUtil.java:235)
org.hibernate.testing.transaction.TransactionUtil.doInJPA(TransactionUtil.java:276)
org.hibernate.test.bytecode.enhancement.dirty.DirtyTrackingCollectionTest.test(DirtyTrackingCollectionTest.java:56)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
org.hibernate.testing.junit4.ExtendedFrameworkMethod.invokeExplosively(ExtendedFrameworkMethod.java:45)
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:298)
org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:292)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.lang.Thread.run(Thread.java:748)

рддреЛ $$_hibernate_removeDirtyFields() рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдЧреНрд░рд╣ рдкрд░ size() рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред _рдХреНрдпрд╛ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рд╣реВрдВ рдХрд┐ рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рд╕рддрдд рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд░рдПрдХреНрд╕ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рд╡рд╣ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрдм рдореИрдВ рдзреНрд╡рдЬ рдХреЛ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕ рдЯреНрд░реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

рдореБрдЭреЗ рд╢рд╛рдпрдж рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ?
рдпрд╣ рдЕрднреА рднреА size() рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ

рддреБрдо рд╕рд╣реА рд╣реЛред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣ рдЖрд▓рд╕реА рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣рд╛рдВ рдПрдХ рдкреАрдЖрд░ рдЬреЛ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: https://github.com/hibernate/hibernate-orm/pull/3664

рдзрдиреНрдпрд╡рд╛рдж @beikov , рдкрд░реАрдХреНрд╖рдг рдЙрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ

@beikov рдЙрддреНрдХреГрд╖реНрдЯ, рдзрдиреНрдпрд╡рд╛рдж

рдзрдиреНрдпрд╡рд╛рдж @beikov , рдкрд░реАрдХреНрд╖рдг рдЙрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ

@DavidD рдХреНрдпрд╛ рдЖрдк рдЕрднреА @beikov рдиреЗ рдЕрднреА PR рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдПрдХ рдкреАрдЖрд░ рдЬреЛ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: hibernate/hibernate-orm#3664

рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ hibernate-core рд░рд┐рд▓реАрдЬрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

#463 . рджреНрд╡рд╛рд░рд╛ рддрдп

рд╕рдмрдХреЛ рд╢реБрдХреНрд░реАрдпрд╛

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

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

gavinking picture gavinking  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

gavinking picture gavinking  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Thomodachi picture Thomodachi  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pqab picture pqab  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ