Skip to content

Commit 8c2de4f

Browse files
DavideDclaude
andcommitted
Migrate ORM WorldRepository to StatelessSession.updateMultiple()
Session.update() was removed in Hibernate ORM 7.x. Switch to StatelessSession with updateMultiple() for batched updates, as recommended by DavideD (Hibernate maintainer). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 769cf84 commit 8c2de4f

1 file changed

Lines changed: 13 additions & 15 deletions

File tree

  • frameworks/Java/quarkus/resteasy-reactive-hibernate/src/main/java/io/quarkus/benchmark/repository

frameworks/Java/quarkus/resteasy-reactive-hibernate/src/main/java/io/quarkus/benchmark/repository/WorldRepository.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package io.quarkus.benchmark.repository;
22

3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import io.quarkus.benchmark.model.World;
7+
import io.quarkus.benchmark.utils.LocalRandom;
8+
import io.quarkus.benchmark.utils.Randomizer;
39
import jakarta.inject.Inject;
410
import jakarta.inject.Singleton;
511
import jakarta.transaction.Transactional;
6-
7-
import org.hibernate.FlushMode;
8-
import org.hibernate.Session;
912
import org.hibernate.SessionFactory;
1013
import org.hibernate.StatelessSession;
1114

12-
import io.quarkus.benchmark.model.World;
13-
import io.quarkus.benchmark.utils.LocalRandom;
14-
import io.quarkus.benchmark.utils.Randomizer;
15-
1615
@Singleton
1716
public class WorldRepository {
1817

@@ -57,23 +56,22 @@ public World[] loadNWorlds(final int count) {
5756

5857
public World[] updateNWorlds(final int count) {
5958
//We're again forced to use the "individual load" pattern by the rules:
60-
final World[] list = loadNWorlds(count);
59+
final World[] worlds = loadNWorlds(count);
60+
final List<World> worldList = new ArrayList<>(worlds.length);
6161
final LocalRandom random = Randomizer.current();
62-
try (Session s = sf.openSession()) {
63-
s.setJdbcBatchSize(count);
64-
s.setHibernateFlushMode(FlushMode.MANUAL);
65-
for (World w : list) {
62+
try (StatelessSession s = sf.openStatelessSession()) {
63+
for (World w : worlds) {
6664
//Read the one field, as required by the following rule:
6765
// # vi. At least the randomNumber field must be read from the database result set.
6866
final int previousRead = w.getRandomNumber();
6967
//Update it, but make sure to exclude the current number as Hibernate optimisations would otherwise
7068
// skip the write operation:
7169
w.setRandomNumber(random.getNextRandomExcluding(previousRead));
72-
s.update(w);
70+
worldList.add(w);
7371
}
74-
s.flush();
72+
s.updateMultiple(worldList);
7573
}
76-
return list;
74+
return worlds;
7775
}
7876

7977
}

0 commit comments

Comments
 (0)