diff --git a/persistence-modules/hibernate-exceptions-2/README.md b/persistence-modules/hibernate-exceptions-2/README.md new file mode 100644 index 000000000000..e320af31b433 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/README.md @@ -0,0 +1 @@ +### Relevant Articles: \ No newline at end of file diff --git a/persistence-modules/hibernate-exceptions-2/pom.xml b/persistence-modules/hibernate-exceptions-2/pom.xml new file mode 100644 index 000000000000..26559295ded3 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + hibernate-exceptions-2 + 0.0.1-SNAPSHOT + hibernate-exceptions-2 + + + com.baeldung + persistence-modules + 1.0.0-SNAPSHOT + + + + + org.hibernate.orm + hibernate-core + ${hibernate.version} + + + com.h2database + h2 + ${h2.version} + + + + + 2.3.232 + + + \ No newline at end of file diff --git a/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/noargumentforordinalparameter/Employee.java b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/noargumentforordinalparameter/Employee.java new file mode 100644 index 000000000000..dd94ada57b4d --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/noargumentforordinalparameter/Employee.java @@ -0,0 +1,37 @@ +package com.baeldung.hibernate.noargumentforordinalparameter; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Entity +public class Employee { + @Id + private int id; + private String firstName; + private String lastName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + +} diff --git a/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/noargumentforordinalparameter/HibernateUtil.java b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/noargumentforordinalparameter/HibernateUtil.java new file mode 100644 index 000000000000..397144020297 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/noargumentforordinalparameter/HibernateUtil.java @@ -0,0 +1,42 @@ +package com.baeldung.hibernate.noargumentforordinalparameter; + +import java.util.HashMap; +import java.util.Map; + +import org.hibernate.SessionFactory; +import org.hibernate.boot.Metadata; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.service.ServiceRegistry; + +public class HibernateUtil { + private static SessionFactory sessionFactory; + + public static SessionFactory getSessionFactory() { + if (sessionFactory == null) { + Map settings = new HashMap<>(); + settings.put("hibernate.connection.driver_class", "org.h2.Driver"); + settings.put("hibernate.connection.url", "jdbc:h2:mem:test"); + settings.put("hibernate.connection.username", "sa"); + settings.put("hibernate.connection.password", ""); + settings.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + settings.put("hibernate.show_sql", "true"); + settings.put("hibernate.hbm2ddl.auto", "update"); + + try { + ServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().applySettings(settings) + .build(); + + Metadata metadata = new MetadataSources(standardRegistry).addAnnotatedClass(Employee.class) + .getMetadataBuilder() + .build(); + + sessionFactory = metadata.getSessionFactoryBuilder() + .build(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return sessionFactory; + } +} \ No newline at end of file diff --git a/persistence-modules/hibernate-exceptions-2/src/test/java/com/baeldung/hibernate/noargumentforordinalparameter/NoArgumentForOrdinalParameterUnitTest.java b/persistence-modules/hibernate-exceptions-2/src/test/java/com/baeldung/hibernate/noargumentforordinalparameter/NoArgumentForOrdinalParameterUnitTest.java new file mode 100644 index 000000000000..2e609a1c5218 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/src/test/java/com/baeldung/hibernate/noargumentforordinalparameter/NoArgumentForOrdinalParameterUnitTest.java @@ -0,0 +1,59 @@ +package com.baeldung.hibernate.noargumentforordinalparameter; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.hibernate.QueryException; +import org.hibernate.Session; +import org.hibernate.query.Query; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +class NoArgumentForOrdinalParameterUnitTest { + + private static Session session; + + @BeforeAll + static void init() { + session = HibernateUtil.getSessionFactory() + .openSession(); + session.beginTransaction(); + } + + @AfterAll + static void clear() { + session.close(); + } + + @Test + void whenMissingParameter_thenThrowQueryParameterException() { + assertThatThrownBy(() -> { + String selectQuery = """ + FROM Employee + WHERE firstName = ?1 + AND lastName = ?2 + """; + Query query = session.createQuery(selectQuery, Employee.class); + query.setParameter(1, "Jean"); + + query.list(); + }).isInstanceOf(QueryException.class) + .hasMessageContaining("No argument for ordinal parameter"); + } + + @Test + void whenDefiningAllParameters_thenCorrect() { + String selectQuery = """ + FROM Employee + WHERE firstName = ?1 + AND lastName = ?2 + """; + Query query = session.createQuery(selectQuery, Employee.class); + query.setParameter(1, "Jean") + .setParameter(2, "Smith"); + + assertThat(query.list()).isNotNull(); + } + +} diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 3ef160203fb7..650fe32c6567 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -36,6 +36,7 @@ hibernate-mapping-2 hibernate-annotations hibernate-exceptions + hibernate-exceptions-2 hibernate-libraries hibernate-jpa hibernate-jpa-2