diff --git a/pom.xml b/pom.xml
index 2a49efe..1677805 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,7 @@
     <findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
     <flexmark.version>0.64.8</flexmark.version>
     <google.java.format.version>1.15.0</google.java.format.version>
-    <hibernate.version>6.6.1.Final</hibernate.version>
+    <hibernate.version>7.0.4.Final</hibernate.version>
     <hibernate-types.version>3.10.0</hibernate-types.version>
     <jakarta-jacc-api.version>1.6.1</jakarta-jacc-api.version>
     <jna.version>5.15.0</jna.version>
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/accesscontrol/Role.java b/src/main/java/eu/mulk/mulkcms2/benki/accesscontrol/Role.java
index 9b73084..9b45333 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/accesscontrol/Role.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/accesscontrol/Role.java
@@ -79,7 +79,7 @@
   public Set<String> tags;
 
   public static Role getWorld() {
-    return find("from Role r join r.tags tag where tag = 'world'").singleResult();
+    return find("select r from Role r join r.tags tag where tag = 'world'").singleResult();
   }
 
   @Override
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/users/User.java b/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
index 9f2cd5c..b7ba545 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/users/User.java
@@ -148,13 +148,13 @@
   }
 
   public static User findByNickname(String nickname) {
-    return User.find("from BenkiUser u join u.nicknames n where ?1 = n", nickname).singleResult();
+    return User.find("select u from BenkiUser u join u.nicknames n where ?1 = n", nickname).singleResult();
   }
 
   public static User findByNicknameWithRoles(String nickname) {
     return User.find(
             ""
-                + "from BenkiUser u "
+                + "select u from BenkiUser u "
                 + "join u.nicknames n "
                 + "left join fetch u.effectiveRoles r "
                 + "left join fetch r.tags "
diff --git a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
index 42f7c63..22c7fa5 100644
--- a/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
+++ b/src/main/java/eu/mulk/mulkcms2/benki/wiki/WikiResource.java
@@ -62,7 +62,7 @@
 
     Optional<WikiPageRevision> maybePage =
         WikiPageRevision.find(
-                "from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
+                "select rev from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
                 Sort.by("date").descending(),
                 pageName)
             .firstResultOptional();
@@ -71,7 +71,7 @@
     } else {
       var userName = identity.getPrincipal().getName();
       User user =
-          User.find("from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult();
+          User.find("select u from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult();
       page = new WikiPageRevision();
       page.content = "";
       page.title = pageName;
@@ -108,11 +108,11 @@
 
     var userName = identity.getPrincipal().getName();
     User user =
-        User.find("from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult();
+        User.find("select u from BenkiUser u join u.nicknames n where ?1 = n", userName).singleResult();
 
     Optional<WikiPageRevision> maybeCurrentRevision =
         WikiPageRevision.find(
-                "from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
+                "select rev from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
                 Sort.by("date").descending(),
                 pageName)
             .firstResultOptional();
@@ -153,7 +153,7 @@
   public TemplateInstance getPageRevisions(@PathParam("pageName") String pageName) {
     Optional<WikiPageRevision> maybePrimaryRevision =
         WikiPageRevision.find(
-                "from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
+                "select rev from WikiPageRevision rev join fetch rev.author where rev.title = ?1",
                 Sort.by("date").descending(),
                 pageName)
             .firstResultOptional();
@@ -164,7 +164,7 @@
 
     WikiPage page =
         WikiPageRevision.find(
-                "from WikiPage p"
+                "select p from WikiPage p"
                     + " join fetch p.revisions rev"
                     + " join fetch rev.author"
                     + " where p.id = ?1",
