From a6c0bf1d3f68780240a49ead43a4dab0f47fd411 Mon Sep 17 00:00:00 2001 From: marko-bekhta Date: Thu, 7 Mar 2024 16:44:03 +0100 Subject: [PATCH] Escape entity name in Panache queries --- .../hibernate/common/runtime/PanacheJpaUtil.java | 4 +++- .../quarkus/it/panache/fk/issue35812/SomeEntity.java | 10 ++++++++++ .../io/quarkus/it/panache/TestTransactionTest.java | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/fk/issue35812/SomeEntity.java diff --git a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java index 13230c3c28c2d..6685c3bcee2e1 100644 --- a/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java +++ b/extensions/panache/panache-hibernate-common/runtime/src/main/java/io/quarkus/panache/hibernate/common/runtime/PanacheJpaUtil.java @@ -98,7 +98,9 @@ public static String getCountQueryUsingParser(String query) { public static String getEntityName(Class entityClass) { // FIXME: not true? - return entityClass.getName(); + // Escape the entity name just in case some keywords are used + // in package names that will prevent ORM from executing a query + return "`%s`".formatted(entityClass.getName()); } public static String createFindQuery(Class entityClass, String query, int paramCount) { diff --git a/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/fk/issue35812/SomeEntity.java b/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/fk/issue35812/SomeEntity.java new file mode 100644 index 0000000000000..5fbc4852341cc --- /dev/null +++ b/integration-tests/hibernate-orm-panache/src/main/java/io/quarkus/it/panache/fk/issue35812/SomeEntity.java @@ -0,0 +1,10 @@ +package io.quarkus.it.panache.fk.issue35812; + +import jakarta.persistence.Entity; + +import io.quarkus.hibernate.orm.panache.PanacheEntity; + +@Entity +public class SomeEntity extends PanacheEntity { + public String string; +} diff --git a/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/TestTransactionTest.java b/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/TestTransactionTest.java index 4da5e4850b92b..d3f93c057512c 100644 --- a/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/TestTransactionTest.java +++ b/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/TestTransactionTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; +import io.quarkus.it.panache.fk.issue35812.SomeEntity; import io.quarkus.test.TestTransaction; import io.quarkus.test.junit.QuarkusTest; @@ -39,6 +40,11 @@ public void test3() { Assertions.assertEquals(0, Beer.find("name", "Lager").count()); } + @Test + public void test4() { + Assertions.assertEquals(0, SomeEntity.findAll().count()); + } + void intentionallyNonPrivateHelperMethod() { } }