diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/Address.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/Address.java new file mode 100644 index 000000000000..dadd3c854b35 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/Address.java @@ -0,0 +1,22 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.query.binding; + +import jakarta.persistence.Embeddable; + +@Embeddable +class Address { + String street; + String city; + String state; + + Address() {} + + Address(String street, String city, String state) { + this.street = street; + this.city = city; + this.state = state; + } +} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/ParameterBindTypeTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/ParameterBindTypeTest.java new file mode 100644 index 000000000000..21e30ad865e1 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/ParameterBindTypeTest.java @@ -0,0 +1,37 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.query.binding; + +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SessionFactory +@DomainModel(annotatedClasses = Person.class) +class ParameterBindTypeTest { + @Test void test(SessionFactoryScope scope) { + scope.inTransaction( session -> { + Address address = new Address( "Diagonal", "Barcelona", "CAT" ); + Person gavin = new Person( "Gavin", address ); + session.persist( gavin ); + assertEquals(1, session.createQuery( "from Person where address = :address", Person.class ) + .setParameter( "address", address, Address_.class_) + .getResultList().size() ); + assertEquals(1, session.createQuery( "from Person where address = :address", Person.class ) + .setParameter( "address", address, Person_.address.getType()) + .getResultList().size() ); + assertEquals(1, session.createQuery( "from Person where address.street = :street", Person.class ) + .setParameter( "street", "Diagonal", Address_.street.getType()) + .getResultList().size() ); + assertEquals(1, session.createQuery( "from Person p where p = :person", Person.class ) + .setParameter( "person", new Person( "Gavin", null ), Person_.class_) + .getResultList().size() ); + } ); + } + +} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/Person.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/Person.java new file mode 100644 index 000000000000..37f177cffd35 --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/binding/Person.java @@ -0,0 +1,22 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.query.binding; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Entity +class Person { + @Id + String name; + Address address; + + Person() {} + + Person(String name, Address address) { + this.name = name; + this.address = address; + } +}