diff --git a/.gitignore b/.gitignore
index e841cc4bf5..1352c943be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,4 @@ target/
 
 spring-openid/src/main/resources/application.properties
 .recommenders/
+/spring-hibernate4/nbproject/
\ No newline at end of file
diff --git a/spring-hibernate4/pom.xml b/spring-hibernate4/pom.xml
index ead46fa02a..dbacb3a60a 100644
--- a/spring-hibernate4/pom.xml
+++ b/spring-hibernate4/pom.xml
@@ -105,7 +105,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>${junit.version}</version>
+            <version>4.12</version>
             <scope>test</scope>
         </dependency>
 
@@ -119,7 +119,7 @@
         <dependency>
             <groupId>org.hamcrest</groupId>
             <artifactId>hamcrest-core</artifactId>
-            <version>${org.hamcrest.version}</version>
+            <version>1.3</version>
             <scope>test</scope>
         </dependency>
 
diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java
new file mode 100644
index 0000000000..ba54985853
--- /dev/null
+++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java
@@ -0,0 +1,38 @@
+package com.baeldung.hibernate.oneToMany.config;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.service.ServiceRegistry;
+
+public class HibernateAnnotationUtil {
+
+	private static SessionFactory sessionFactory;
+	
+	private static SessionFactory buildSessionFactory() {
+        try {
+            // Create the SessionFactory from hibernate-annotation.cfg.xml
+        	Configuration configuration = new Configuration();
+        	configuration.configure("hibernate-annotation.cfg.xml");
+        	System.out.println("Hibernate Annotation Configuration loaded");
+        	
+        	ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
+        	System.out.println("Hibernate Annotation serviceRegistry created");
+        	
+        	SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
+                
+        	
+            return sessionFactory;
+        }
+        catch (Throwable ex) {
+            System.err.println("Initial SessionFactory creation failed." + ex);
+            ex.printStackTrace();
+            throw new ExceptionInInitializerError(ex);
+        }
+    }
+	
+	public static SessionFactory getSessionFactory() {
+		if(sessionFactory == null) sessionFactory = buildSessionFactory();
+        return sessionFactory;
+    }
+}
diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java
new file mode 100644
index 0000000000..fb99ab1d69
--- /dev/null
+++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java
@@ -0,0 +1,60 @@
+package com.baeldung.hibernate.oneToMany.main;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+
+import com.baeldung.hibernate.model.Cart;
+import com.baeldung.hibernate.model.Items;
+import com.baeldung.hibernate.config.HibernateAnnotationUtil;
+
+public class HibernateOneToManyAnnotationMain {
+
+	public static void main(String[] args) {
+
+		Cart cart = new Cart();
+		cart.setName("MyCart");
+		
+		Items item1 = new Items("I10", 10, 1, cart);
+		Items item2 = new Items("I20", 20, 2, cart);
+		Set<Items> itemsSet = new HashSet<Items>();
+		itemsSet.add(item1); itemsSet.add(item2);
+		
+		cart.setItems(itemsSet);
+		cart.setTotal(10*1 + 20*2);
+		
+		SessionFactory sessionFactory = null;
+		Session session = null;
+		Transaction tx = null;
+		try{
+		//Get Session
+		sessionFactory = HibernateAnnotationUtil.getSessionFactory();
+		session = sessionFactory.getCurrentSession();
+		System.out.println("Session created");
+		//start transaction
+		tx = session.beginTransaction();
+		//Save the Model object
+		session.save(cart);
+		session.save(item1);
+		session.save(item2);
+		//Commit transaction
+		tx.commit();
+		System.out.println("Cart ID="+cart.getId());
+		System.out.println("item1 ID="+item1.getId()+", Foreign Key Cart ID="+item1.getCart().getId());
+		System.out.println("item2 ID="+item2.getId()+", Foreign Key Cart ID="+item1.getCart().getId());
+		
+		}catch(Exception e){
+			System.out.println("Exception occured. "+e.getMessage());
+			e.printStackTrace();
+		}finally{
+			if(!sessionFactory.isClosed()){
+				System.out.println("Closing SessionFactory");
+				sessionFactory.close();
+			}
+		}
+	}
+
+}
diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java
new file mode 100644
index 0000000000..fdbfda2279
--- /dev/null
+++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java
@@ -0,0 +1,56 @@
+package com.baeldung.hibernate.oneToMany.model;
+
+import java.util.Set;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="CART")
+public class Cart {
+
+	@Id
+	@GeneratedValue(strategy=GenerationType.IDENTITY)
+	@Column(name="cart_id")
+	private long id;
+	
+	@Column(name="total")
+	private double total;
+	
+	@Column(name="name")
+	private String name;
+	
+	@OneToMany(mappedBy="cart")
+	private Set<Items> items;
+	
+	public long getId() {
+		return id;
+	}
+	public void setId(long id) {
+		this.id = id;
+	}
+	public double getTotal() {
+		return total;
+	}
+	public void setTotal(double total) {
+		this.total = total;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public Set<Items> getItems() {
+		return items;
+	}
+	public void setItems(Set<Items> items) {
+		this.items = items;
+	}
+	
+}
diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java
new file mode 100644
index 0000000000..630bf0a12e
--- /dev/null
+++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java
@@ -0,0 +1,74 @@
+package com.baeldung.hibernate.oneToMany.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="ITEMS")
+public class Items {
+
+	@Id
+	@GeneratedValue(strategy=GenerationType.IDENTITY)
+	@Column(name="id")
+	private long id;
+	
+	@Column(name="item_id")
+	private String itemId;
+	
+	@Column(name="item_total")
+	private double itemTotal;
+	
+	@Column(name="quantity")
+	private int quantity;
+	
+	@ManyToOne
+	@JoinColumn(name="cart_id", nullable=false)
+	private Cart cart;
+	
+	//Hibernate requires no-args constructor
+	public Items(){}
+	
+	public Items(String itemId, double total, int qty, Cart c){
+		this.itemId=itemId;
+		this.itemTotal=total;
+		this.quantity=qty;
+		this.cart=c;
+	}
+	public String getItemId() {
+		return itemId;
+	}
+	public void setItemId(String itemId) {
+		this.itemId = itemId;
+	}
+	public double getItemTotal() {
+		return itemTotal;
+	}
+	public void setItemTotal(double itemTotal) {
+		this.itemTotal = itemTotal;
+	}
+	public int getQuantity() {
+		return quantity;
+	}
+	public void setQuantity(int quantity) {
+		this.quantity = quantity;
+	}
+	public Cart getCart() {
+		return cart;
+	}
+	public void setCart(Cart cart) {
+		this.cart = cart;
+	}
+	public long getId() {
+		return id;
+	}
+	public void setId(long id) {
+		this.id = id;
+	}
+	
+}
diff --git a/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml b/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml
new file mode 100644
index 0000000000..92e323460d
--- /dev/null
+++ b/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-configuration PUBLIC
+		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+		"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
+<hibernate-configuration>
+    <session-factory>
+        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
+        <property name="hibernate.connection.password">bastard5</property>
+        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/setup</property>
+        <property name="hibernate.connection.username">root</property>
+        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
+        
+        <property name="hibernate.current_session_context_class">thread</property>
+        <property name="hibernate.show_sql">true</property>
+        
+        <mapping class="com.baeldung.hibernate.model.Cart"/>
+        <mapping class="com.baeldung.hibernate.model.Items"/>
+    </session-factory>
+</hibernate-configuration>
diff --git a/spring-hibernate4/src/main/resources/one_to_many.sql b/spring-hibernate4/src/main/resources/one_to_many.sql
new file mode 100644
index 0000000000..f2da0b4429
--- /dev/null
+++ b/spring-hibernate4/src/main/resources/one_to_many.sql
@@ -0,0 +1,17 @@
+CREATE TABLE `Cart` (
+  `cart_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `total` decimal(10,0) NOT NULL,
+  `name` varchar(10) DEFAULT NULL,
+  PRIMARY KEY (`cart_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
+
+CREATE TABLE `Items` (
+  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+  `cart_id` int(11) unsigned NOT NULL,
+  `item_id` varchar(10) NOT NULL,
+  `item_total` decimal(10,0) NOT NULL,
+  `quantity` int(3) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `cart_id` (`cart_id`),
+  CONSTRAINT `items_ibfk_1` FOREIGN KEY (`cart_id`) REFERENCES `Cart` (`cart_id`)
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
\ No newline at end of file
diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtilTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtilTest.java
new file mode 100644
index 0000000000..4d1b59a21e
--- /dev/null
+++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtilTest.java
@@ -0,0 +1,43 @@
+
+package com.baeldung.hibernate.oneToMany.config;
+
+import org.hibernate.SessionFactory;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+public class HibernateAnnotationUtilTest {
+    
+    public HibernateAnnotationUtilTest() {
+    }
+    
+    @BeforeClass
+    public static void setUpClass() {
+    }
+    
+    @AfterClass
+    public static void tearDownClass() {
+    }
+    
+    @Before
+    public void setUp() {
+    }
+    
+    @After
+    public void tearDown() {
+    }
+    
+    @Test
+    public void testGetSessionFactory() {
+        System.out.println("getSessionFactory");
+        SessionFactory expResult = null;
+        SessionFactory result = HibernateAnnotationUtil.getSessionFactory();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+    
+}
diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java
new file mode 100644
index 0000000000..7ba6d3ade9
--- /dev/null
+++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java
@@ -0,0 +1,40 @@
+
+package com.baeldung.hibernate.oneToMany.main;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+public class HibernateOneToManyAnnotationMainTest {
+    
+    public HibernateOneToManyAnnotationMainTest() {
+    }
+    
+    @BeforeClass
+    public static void setUpClass() {
+    }
+    
+    @AfterClass
+    public static void tearDownClass() {
+    }
+    
+    @Before
+    public void setUp() {
+    }
+    
+    @After
+    public void tearDown() {
+    }
+    @Test
+    public void testMain() {
+        System.out.println("main");
+        String[] args = null;
+        HibernateOneToManyAnnotationMain.main(args);
+        fail("The test failed.");
+    }
+    
+}
diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/model/CartTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/model/CartTest.java
new file mode 100644
index 0000000000..5d6dbbb5e0
--- /dev/null
+++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/model/CartTest.java
@@ -0,0 +1,111 @@
+
+package com.baeldung.hibernate.oneToMany.model;
+
+import java.util.Set;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+public class CartTest {
+    
+    public CartTest() {
+    }
+    
+    @BeforeClass
+    public static void setUpClass() {
+    }
+    
+    @AfterClass
+    public static void tearDownClass() {
+    }
+    
+    @Before
+    public void setUp() {
+    }
+    
+    @After
+    public void tearDown() {
+    }
+    
+    @Test
+    public void testGetId() {
+        System.out.println("getId");
+        Cart instance = new Cart();
+        long expResult = 0L;
+        long result = instance.getId();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetId() {
+        System.out.println("setId");
+        long id = 0L;
+        Cart instance = new Cart();
+        instance.setId(id);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetTotal() {
+        System.out.println("getTotal");
+        Cart instance = new Cart();
+        double expResult = 0.0;
+        double result = instance.getTotal();
+        assertEquals(expResult, result, 0.0);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetTotal() {
+        System.out.println("setTotal");
+        double total = 0.0;
+        Cart instance = new Cart();
+        instance.setTotal(total);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetName() {
+        System.out.println("getName");
+        Cart instance = new Cart();
+        String expResult = "";
+        String result = instance.getName();
+        assertEquals(expResult, result);
+        fail("The test failed");
+    }
+
+    @Test
+    public void testSetName() {
+        System.out.println("setName");
+        String name = "";
+        Cart instance = new Cart();
+        instance.setName(name);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetItems() {
+        System.out.println("getItems");
+        Cart instance = new Cart();
+        Set<Items> expResult = null;
+        Set<Items> result = instance.getItems();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetItems() {
+        System.out.println("setItems");
+        Set<Items> items = null;
+        Cart instance = new Cart();
+        instance.setItems(items);
+        fail("The test case failed");
+    }
+    
+    
+}
diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/model/ItemsTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/model/ItemsTest.java
new file mode 100644
index 0000000000..eda45ce4f5
--- /dev/null
+++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/model/ItemsTest.java
@@ -0,0 +1,131 @@
+
+package com.baeldung.hibernate.oneToMany.model;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+
+public class ItemsTest {
+    
+    public ItemsTest() {
+    }
+    
+    @BeforeClass
+    public static void setUpClass() {
+    }
+    
+    @AfterClass
+    public static void tearDownClass() {
+    }
+    
+    @Before
+    public void setUp() {
+    }
+    
+    @After
+    public void tearDown() {
+    }
+    
+    @Test
+    public void testGetItemId() {
+        System.out.println("getItemId");
+        Items instance = new Items();
+        String expResult = "";
+        String result = instance.getItemId();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetItemId() {
+        System.out.println("setItemId");
+        String itemId = "";
+        Items instance = new Items();
+        instance.setItemId(itemId);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetItemTotal() {
+        System.out.println("getItemTotal");
+        Items instance = new Items();
+        double expResult = 0.0;
+        double result = instance.getItemTotal();
+        assertEquals(expResult, result, 0.0);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetItemTotal() {
+        System.out.println("setItemTotal");
+        double itemTotal = 0.0;
+        Items instance = new Items();
+        instance.setItemTotal(itemTotal);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetQuantity() {
+        System.out.println("getQuantity");
+        Items instance = new Items();
+        int expResult = 0;
+        int result = instance.getQuantity();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetQuantity() {
+        System.out.println("setQuantity");
+        int quantity = 0;
+        Items instance = new Items();
+        instance.setQuantity(quantity);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetCart() {
+        System.out.println("getCart");
+        Items instance = new Items();
+        Cart expResult = null;
+        Cart result = instance.getCart();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetCart() {
+        System.out.println("setCart");
+        Cart cart = null;
+        Items instance = new Items();
+        instance.setCart1(cart);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testGetId() {
+        System.out.println("getId");
+        Items instance = new Items();
+        long expResult = 0L;
+        long result = instance.getId();
+        assertEquals(expResult, result);
+        fail("The test failed.");
+    }
+
+    @Test
+    public void testSetId() {
+        System.out.println("setId");
+        long id = 0L;
+        Items instance = new Items();
+        instance.setId(id);
+        fail("The test failed.");
+    }
+    
+}
+
+    
+}