Skip to content

2.0.5 upgrade and persist error. #1748

Closed as not planned
Closed as not planned
@KimDev88

Description

@KimDev88

This source is working.

public CompletionStage<Shop> save(Shop shop, Stage.Session session) {
        return session.persist(shop)
                .thenApply(unused -> shop);
    }

but upgrade hibernate-core to 2.0.5, this source is not working.

java.util.concurrent.CompletionException: org.hibernate.HibernateException: java.util.concurrent.CompletionException: java.lang.NullPointerException: Cannot invoke "org.hibernate.sql.results.graph.DomainResult.createResultAssembler(org.hibernate.sql.results.graph.FetchParentAccess, org.hibernate.sql.results.graph.AssemblerCreationState)" because the return value of "java.util.List.get(int)" is null
		at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
		at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
		at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:936)
		at java.base/java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:950)
		at java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2340)
		at java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:144)
		at org.hibernate.reactive.session.impl.ReactiveSessionImpl.firePersist(ReactiveSessionImpl.java:734)
		at org.hibernate.reactive.session.impl.ReactiveSessionImpl.reactivePersist(ReactiveSessionImpl.java:718)
		at org.hibernate.reactive.stage.impl.StageSessionImpl.persist(StageSessionImpl.java:159)
		at com.bdpick.repository.ShopRepository.save(ShopRepository.java:29)
		at com.bdpick.service.ShopService.lambda$createShop$4(ShopService.java:121)
		at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)
		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
		at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)
		at org.hibernate.reactive.util.async.impl.AsyncTrampoline$TrampolineInternal.unroll(AsyncTrampoline.java:131)
		at org.hibernate.reactive.util.async.impl.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:126)
		at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
		at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
		at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)
		at io.vertx.core.Future.lambda$toCompletionStage$3(Future.java:536)
		at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141)
		at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
		at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
		at io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23)

-- service class source --

@Transactional
    public Mono<Shop> createShop(@NonNull Map<String, Object> headerMap,
                                 @NonNull Flux<FilePart> files,
                                 @NonNull Flux<String> filesTypes,
                                 @NonNull Shop shop) {
        List<ShopImage> imageList = new ArrayList<>();
        String userId = jwtService.getUserIdByHeaderMap(headerMap);
        User user = new User();
        user.setId(userId);
        shop.setUser(user);

        return factory.withTransaction(session -> {
                    return shopRepository.findShopByRegisterNumber(shop, session)
                            .thenCompose(foundShop -> {
                                if (foundShop != null) {
                                    throw new RuntimeException(KEY_DUPLICATE_REGISTER);
                                }
                                List<FilePart> filePartList = files.toStream().toList();
                                List<String> fileTypeList = filesTypes.toStream().toList();
                                IntStream.range(0, Math.min(filePartList.size(), fileTypeList.size()))
                                        .mapToObj(i -> Tuple.of(filePartList.get(i), fileTypeList.get(i)))
                                        .forEach(tuple -> {
                                            String type = tuple.getString(1);
                                            ShopImage shopImage = new ShopImage();
                                            Image image = new Image();
                                            BdFile bdFile = BdUtil.uploadFile(tuple.get(FilePart.class, 0), type, BdConstants.DIRECTORY_NAME_IMAGES).block();

                                            image.setDisplayOrder(1L);
                                            image.setBdFile(bdFile);

                                            shopImage.setShop(shop);
                                            shopImage.setImage(image);
                                            shopImage.setType(ShopFileType.valueOf(type));
                                            imageList.add(shopImage);
                                        });
                                shop.setImageList(imageList);
                                return shopRepository.save(shop, session);
                            });
                })
                .thenApply(Mono::just)
                .exceptionally(Mono::error)
                .toCompletableFuture().join();
    }

-- working --
hibernate-core-6.2.5.Final.jar
hibernate-reactive-core-2.0.4.Final.jar
vertx-mysql-client-4.4.4.jar

-- not working --
hibernate-core-6.2.8.Final.jar
hibernate-reactive-core-2.0.5.Final.jar
vertx-sql-client-4.4.5.jar

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions