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 @@
junit
junit
- ${junit.version}
+ 4.12
test
@@ -119,7 +119,7 @@
org.hamcrest
hamcrest-core
- ${org.hamcrest.version}
+ 1.3
test
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 itemsSet = new HashSet();
+ 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;
+
+ 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 getItems() {
+ return items;
+ }
+ public void setItems(Set 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 @@
+
+
+
+
+ com.mysql.jdbc.Driver
+ bastard5
+ jdbc:mysql://localhost:3306/setup
+ root
+ org.hibernate.dialect.MySQLDialect
+
+ thread
+ true
+
+
+
+
+
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 expResult = null;
+ Set result = instance.getItems();
+ assertEquals(expResult, result);
+ fail("The test failed.");
+ }
+
+ @Test
+ public void testSetItems() {
+ System.out.println("setItems");
+ Set 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.");
+ }
+
+}
+
+
+}