diff --git a/persistence-modules/hibernate-mapping/pom.xml b/persistence-modules/hibernate-mapping/pom.xml
index 11caf67bf1..fdc82a5275 100644
--- a/persistence-modules/hibernate-mapping/pom.xml
+++ b/persistence-modules/hibernate-mapping/pom.xml
@@ -31,6 +31,22 @@
h2
${h2database.version}
+
+
+ org.hibernate
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+ javax.el
+ javax.el-api
+ ${javax.el-api.version}
+
+
+ org.glassfish
+ javax.el
+ ${org.glassfish.javax.el.version}
+
@@ -47,6 +63,9 @@
5.3.7.Final
1.4.196
3.8.0
+ 5.3.3.Final
+ 2.2.5
+ 3.0.1-b08
\ No newline at end of file
diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/Strategy.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/Strategy.java
index 75f10ed583..78434fd2a2 100644
--- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/Strategy.java
+++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/Strategy.java
@@ -9,7 +9,7 @@ public enum Strategy {
//See that the classes belongs to different packages
MAP_KEY_COLUMN_BASED(Collections.singletonList(com.baeldung.hibernate.persistmaps.mapkeycolumn.Order.class)),
MAP_KEY_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkey.Item.class,
- com.baeldung.hibernate.persistmaps.mapkey.Order.class)),
+ com.baeldung.hibernate.persistmaps.mapkey.Order.class,com.baeldung.hibernate.persistmaps.mapkey.User.class)),
MAP_KEY_JOIN_COLUMN_BASED(Arrays.asList(com.baeldung.hibernate.persistmaps.mapkeyjoincolumn.Seller.class,
com.baeldung.hibernate.persistmaps.mapkeyjoincolumn.Item.class,
com.baeldung.hibernate.persistmaps.mapkeyjoincolumn.Order.class)),
diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/persistmaps/mapkey/User.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/persistmaps/mapkey/User.java
new file mode 100644
index 0000000000..f6e8f1cdd6
--- /dev/null
+++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/persistmaps/mapkey/User.java
@@ -0,0 +1,66 @@
+package com.baeldung.hibernate.persistmaps.mapkey;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.validation.constraints.Size;
+
+import org.hibernate.validator.constraints.Length;
+
+@Entity
+public class User {
+ @Id
+ @Column(length = 3)
+ private String firstName;
+
+ @Size(min = 3, max = 15)
+ private String middleName;
+
+ @Length(min = 3, max = 15)
+ private String lastName;
+
+ @Column(length = 5)
+ @Size(min = 3, max = 5)
+ private String city;
+
+ public User(String firstName, String middleName, String lastName, String city) {
+ super();
+ this.firstName = firstName;
+ this.middleName = middleName;
+ this.lastName = lastName;
+ this.city = city;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getMiddleName() {
+ return middleName;
+ }
+
+ public void setMiddleName(String middletName) {
+ this.middleName = middletName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+}
diff --git a/persistence-modules/hibernate-mapping/src/test/java/com/baeldung/hibernate/validation/UserValidationUnitTest.java b/persistence-modules/hibernate-mapping/src/test/java/com/baeldung/hibernate/validation/UserValidationUnitTest.java
new file mode 100644
index 0000000000..e39f324856
--- /dev/null
+++ b/persistence-modules/hibernate-mapping/src/test/java/com/baeldung/hibernate/validation/UserValidationUnitTest.java
@@ -0,0 +1,81 @@
+package com.baeldung.hibernate.validation;
+
+import static org.junit.Assert.assertEquals;
+import java.util.Set;
+import javax.persistence.PersistenceException;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import com.baeldung.hibernate.HibernateUtil;
+import com.baeldung.hibernate.Strategy;
+import com.baeldung.hibernate.persistmaps.mapkey.User;
+
+public class UserValidationUnitTest {
+
+ private static Validator validator;
+ private static SessionFactory sessionFactory;
+ private Session session;
+ private Set> constraintViolations;
+
+ @BeforeClass
+ public static void before() {
+ ValidatorFactory config = Validation.buildDefaultValidatorFactory();
+ validator = config.getValidator();
+ sessionFactory = HibernateUtil.getSessionFactory(Strategy.MAP_KEY_BASED);
+ }
+
+ @Before
+ public void setUp() {
+ session = sessionFactory.openSession();
+ session.beginTransaction();
+ }
+
+ @Test
+ public void whenValidationWithSizeAndInvalidMiddleName_thenConstraintViolation() {
+ User user = new User("john", "m", "butler", "japan");
+ constraintViolations = validator.validateProperty(user, "middleName");
+ assertEquals(constraintViolations.size(), 1);
+ }
+
+ @Test
+ public void whenValidationWithSizeAndValidMiddleName_thenNoConstraintViolation() {
+ User user = new User("john", "mathis", "butler", "japan");
+ constraintViolations = validator.validateProperty(user, "middleName");
+ assertEquals(constraintViolations.size(), 0);
+ }
+
+ @Test
+ public void whenValidationWithLengthAndInvalidLastName_thenConstraintViolation() {
+ User user = new User("john", "m", "b", "japan");
+ constraintViolations = validator.validateProperty(user, "lastName");
+ assertEquals(constraintViolations.size(), 1);
+ }
+
+ @Test
+ public void whenValidationWithLengthAndValidLastName_thenNoConstraintViolation() {
+ User user = new User("john", "mathis", "butler", "japan");
+ constraintViolations = validator.validateProperty(user, "lastName");
+ assertEquals(constraintViolations.size(), 0);
+ }
+
+ @Test(expected = PersistenceException.class)
+ public void whenSavingFirstNameWithInvalidFirstName_thenPersistenceException() {
+ User user = new User("john", "mathis", "butler", "japan");
+ session.save(user);
+ session.getTransaction()
+ .commit();
+ }
+
+ @Test
+ public void whenValidationWithSizeAndColumnWithValidCity_thenNoConstraintViolation() {
+ User user = new User("john", "mathis", "butler", "japan");
+ constraintViolations = validator.validateProperty(user, "city");
+ assertEquals(constraintViolations.size(), 0);
+ }
+}