diff --git a/extensions/panache/hibernate-orm-panache/runtime/pom.xml b/extensions/panache/hibernate-orm-panache/runtime/pom.xml index 0fd7465040166..fe71c76a7da2f 100644 --- a/extensions/panache/hibernate-orm-panache/runtime/pom.xml +++ b/extensions/panache/hibernate-orm-panache/runtime/pom.xml @@ -34,6 +34,11 @@ jakarta.json.bind-api true + + io.quarkus + quarkus-jackson + true + diff --git a/extensions/panache/hibernate-orm-panache/runtime/src/main/java/io/quarkus/hibernate/orm/panache/PanacheEntityBase.java b/extensions/panache/hibernate-orm-panache/runtime/src/main/java/io/quarkus/hibernate/orm/panache/PanacheEntityBase.java index cba7688c5d845..a4b97ebc6e9ba 100644 --- a/extensions/panache/hibernate-orm-panache/runtime/src/main/java/io/quarkus/hibernate/orm/panache/PanacheEntityBase.java +++ b/extensions/panache/hibernate-orm-panache/runtime/src/main/java/io/quarkus/hibernate/orm/panache/PanacheEntityBase.java @@ -8,6 +8,8 @@ import javax.persistence.LockModeType; import javax.persistence.Transient; +import com.fasterxml.jackson.annotation.JsonIgnore; + import io.quarkus.hibernate.orm.panache.runtime.JpaOperations; import io.quarkus.panache.common.Parameters; import io.quarkus.panache.common.Sort; @@ -75,6 +77,8 @@ public void delete() { * @return true if this entity is persistent in the database. */ @JsonbTransient + // @JsonIgnore is here to avoid serialization of this property with jackson + @JsonIgnore public boolean isPersistent() { return JpaOperations.isPersistent(this); } diff --git a/integration-tests/hibernate-orm-panache/pom.xml b/integration-tests/hibernate-orm-panache/pom.xml index c71ab4cb7154a..572f19c9d6447 100644 --- a/integration-tests/hibernate-orm-panache/pom.xml +++ b/integration-tests/hibernate-orm-panache/pom.xml @@ -63,6 +63,11 @@ quarkus-test-h2 test + + io.quarkus + quarkus-jackson + test + diff --git a/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/PanacheFunctionalityTest.java b/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/PanacheFunctionalityTest.java index 8a669e9437c73..4c5b29fdfadd7 100644 --- a/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/PanacheFunctionalityTest.java +++ b/integration-tests/hibernate-orm-panache/src/test/java/io/quarkus/it/panache/PanacheFunctionalityTest.java @@ -1,10 +1,14 @@ package io.quarkus.it.panache; import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + import io.quarkus.test.junit.DisabledOnNativeImage; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; @@ -49,4 +53,23 @@ public void testPanacheInTest() { public void testBug5274() { RestAssured.when().get("/test/5274").then().body(is("OK")); } + + /** + * This test is disabled in native mode as there is no interaction with the quarkus integration test endpoint. + */ + @DisabledOnNativeImage + @Test + public void jacksonDeserilazationIgnoresPersitantAttribute() throws JsonProcessingException { + // set Up + Person person = new Person(); + person.name = "max"; + // do + ObjectMapper objectMapper = new ObjectMapper(); + String personAsString = objectMapper.writeValueAsString(person); + // check + // hence no 'persistence'-attribute + assertEquals( + "{\"id\":null,\"name\":\"max\",\"uniqueName\":null,\"address\":null,\"status\":null,\"dogs\":[],\"serialisationTrick\":1}", + personAsString); + } }