diff --git a/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/columnduplicatedmapping/HibernateUtil.java b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/columnduplicatedmapping/HibernateUtil.java new file mode 100644 index 000000000000..8e3c3b1e97b0 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/columnduplicatedmapping/HibernateUtil.java @@ -0,0 +1,39 @@ +package com.baeldung.hibernate.columnduplicatedmapping; + +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"); + + ServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().applySettings(settings) + .build(); + + Metadata metadata = new MetadataSources(standardRegistry).addAnnotatedClass(Person.class) + .getMetadataBuilder() + .build(); + + sessionFactory = metadata.getSessionFactoryBuilder() + .build(); + } + + return sessionFactory; + } +} \ No newline at end of file diff --git a/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/columnduplicatedmapping/Person.java b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/columnduplicatedmapping/Person.java new file mode 100644 index 000000000000..31a85aacd156 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/src/main/java/com/baeldung/hibernate/columnduplicatedmapping/Person.java @@ -0,0 +1,45 @@ +package com.baeldung.hibernate.columnduplicatedmapping; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +@Entity +public class Person { + + @Id + private int id; + + @Column(name = "first_name") + private String firstName; + + // switch these two lines to reproduce the exception + // @Column(name = "first_name") + @Column(name = "last_name") + 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/test/java/com/baeldung/hibernate/columnduplicatedmapping/ColumnDuplicatedMappingUnitTest.java b/persistence-modules/hibernate-exceptions-2/src/test/java/com/baeldung/hibernate/columnduplicatedmapping/ColumnDuplicatedMappingUnitTest.java new file mode 100644 index 000000000000..be354df4aef3 --- /dev/null +++ b/persistence-modules/hibernate-exceptions-2/src/test/java/com/baeldung/hibernate/columnduplicatedmapping/ColumnDuplicatedMappingUnitTest.java @@ -0,0 +1,43 @@ +package com.baeldung.hibernate.columnduplicatedmapping; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.hibernate.DuplicateMappingException; +import org.hibernate.Session; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +class ColumnDuplicatedMappingUnitTest { + + private static Session session; + + @Test + @Disabled("Enable this test case once you uncomment the column mapping in Person entity class") + void whenDuplicatingColumnMapping_thenThrowDuplicateMappingException() { + assertThatThrownBy(() -> { + session = HibernateUtil.getSessionFactory() + .openSession(); + session.beginTransaction(); + + session.createQuery("FROM Person", Person.class) + .list(); + + session.close(); + }).isInstanceOf(DuplicateMappingException.class) + .hasMessageContaining("Column 'first_name' is duplicated in mapping for entity"); + } + + @Test + void whenNotDuplicatingColumnMapping_thenCorrect() { + session = HibernateUtil.getSessionFactory() + .openSession(); + session.beginTransaction(); + + assertThat(session.createQuery("FROM Person", Person.class) + .list()).isEmpty(); + + session.close(); + } + +}