From f87750e06cc231ea72961324c31508dd3998717b Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Tue, 5 Apr 2016 01:23:53 +0200
Subject: [PATCH] Hibernate extensions 2 plain JPA

---
 ws/eclipse/HibIntro/.project                  |   9 +-
 ws/eclipse/HibIntro/pom.xml                   |  83 ++-
 .../component/address/ModifyWorkAddress.java  |  31 +-
 .../java/component/address/PersistUser.java   |  28 +-
 .../src/main/java/component/address/User.java |  18 +-
 .../java/component/email/PersistUser.java     |  21 +-
 .../java/component/emails/DeleteUser.java     |  25 +-
 .../java/component/emails/PersistUser.java    |  23 +-
 .../src/main/java/component/emails/User.java  |   9 +-
 .../component/emails/list/PersistUser.java    |  22 +-
 .../main/java/entity/company1/Employee.java   |   3 +-
 .../src/main/java/entity/company1/Laptop.java |   3 +-
 .../main/java/entity/company1/Persist1.java   |  48 +-
 .../main/java/entity/company1/Persist2.java   |  47 +-
 .../main/java/entity/company2/Employee.java   |   3 +-
 .../src/main/java/entity/company2/Laptop.java |   3 +-
 .../entity/company2/LoadAndDeRegister.java    |  27 +-
 .../main/java/entity/company2/Persist.java    |  53 +-
 .../main/java/entity/company3/Employee.java   |   5 +-
 .../src/main/java/entity/company3/Laptop.java |   3 +-
 .../entity/company3/LoadAndDeRegister.java    |  26 +-
 .../main/java/entity/company3/Persist.java    |  53 +-
 .../main/java/entity/company4/Persist.java    |  63 +-
 .../main/java/entity/company5/Persist.java    |  55 +-
 .../java/entity/company6/ExchangeLaptops.java |  49 +-
 .../main/java/entity/company6/Persist.java    |  45 +-
 .../java/entity/company6/model/Employee.java  |   3 +-
 .../java/entity/company6/model/Laptop.java    |   3 +-
 .../main/java/entity/company7/Persist.java    |  58 +-
 .../entity/company7/ReassignProjects.java     |  72 +-
 .../java/entity/company7/model/Employee.java  |   3 +-
 .../java/entity/company7/model/Project.java   |   3 +-
 .../main/java/entity/company8/Persist.java    |  56 +-
 .../entity/company8/ReassignProjects.java     |  75 +-
 .../java/entity/company8/model/Employee.java  |   3 +-
 .../java/entity/company8/model/Project.java   |   3 +-
 .../java/hibintro/util/HibernateUtil.java     |  30 -
 .../main/java/hibintro/v1/GetSingleUser.java  |  36 +
 .../hibintro/v1/GetUsersAsAttributes.java     |  46 ++
 .../java/hibintro/v1/PersistSingleUser.java   |  28 +
 .../main/java/hibintro/v1/PersistUsers.java   |  33 +
 .../main/java/hibintro/v1/RetrieveAll.java    |  38 ++
 .../java/hibintro/v1/RetrieveSingleUser.java  |  36 +
 .../src/main/java/hibintro/v1/SelectUser.java |  38 ++
 .../java/hibintro/v1/{model => }/User.java    |   4 +-
 .../java/hibintro/v1/run/GetSingleUser.java   |  39 --
 .../hibintro/v1/run/GetUsersAsAttributes.java |  48 --
 .../hibintro/v1/run/PersistSingleUser.java    |  34 -
 .../java/hibintro/v1/run/PersistUsers.java    |  34 -
 .../java/hibintro/v1/run/RetrieveAll.java     |  44 --
 .../v1/run/RetrieveAllByCriteria.java         |  46 --
 .../hibintro/v1/run/RetrieveSingleUser.java   |  39 --
 .../main/java/hibintro/v1/run/SelectUser.java |  39 --
 .../java/hibintro/v2/PersistSingleUser.java   |  29 +-
 .../java/hibintro/v3/PersistSingleUser.java   |  34 +-
 .../java/hibintro/v4/PersistSingleUser.java   |  22 +-
 .../java/hibintro/v5/PersistSingleUser.java   |  20 +-
 .../main/java/hibintro/v6/PersistProject.java |  22 +-
 .../java/hibintro/v7/PersistSingleUser.java   |  23 +-
 .../java/hibintro/v8/PersistSingleUser.java   |  23 +-
 .../java/hibintro/v9/PersistSingleUser.java   |  22 +-
 .../main/java/inherit/joined/v1/Persist.java  |  27 +-
 .../java/inherit/joined/v1/RetrieveAll.java   |  37 +-
 .../inherit/joined/v1/RetrieveCredit.java     |  37 +-
 .../main/java/inherit/joined/v2/Persist.java  |  27 +-
 .../java/inherit/joined/v2/RetrieveAll.java   |  38 +-
 .../inherit/joined/v2/RetrieveRectangles.java |  37 +-
 .../src/main/java/inherit/v1/Persist.java     |  26 +-
 .../src/main/java/inherit/v1/RetrieveAll.java |  37 +-
 .../main/java/inherit/v1/RetrieveCredit.java  |  37 +-
 .../src/main/java/inherit/v2/Persist.java     |  27 +-
 .../src/main/java/inherit/v3/Persist.java     |  27 +-
 .../src/main/java/inherit/v3/RetrieveAll.java |  38 +-
 .../java/inherit/v3/RetrieveRectangles.java   |  37 +-
 .../src/main/java/session1/LoadUser.java      |  40 +-
 .../main/java/session1/PersistSingleUser.java |  22 +-
 .../src/main/java/session1/hibernate.cfg.xml  |  20 -
 .../java/session2/CompareNewlyCreated.java    |  28 +-
 .../src/main/java/session2/LoadUser.java      |  43 +-
 .../main/java/session2/PersistSingleUser.java |  22 +-
 .../src/main/java/session2/hibernate.cfg.xml  |  20 -
 .../java/session3/CompareNewlyCreated.java    |  29 +-
 .../src/main/java/session3/LoadUser.java      |  43 +-
 .../main/java/session3/PersistSingleUser.java |  23 +-
 .../src/main/java/session3/hibernate.cfg.xml  |  20 -
 .../main/resources/META-INF/persistence.xml   | 645 ++++++++++++++++++
 86 files changed, 1859 insertions(+), 1369 deletions(-)
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/util/HibernateUtil.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetSingleUser.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetUsersAsAttributes.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistSingleUser.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistUsers.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveAll.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveSingleUser.java
 create mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/SelectUser.java
 rename ws/eclipse/HibIntro/src/main/java/hibintro/v1/{model => }/User.java (95%)
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetSingleUser.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetUsersAsAttributes.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistSingleUser.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistUsers.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAll.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAllByCriteria.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveSingleUser.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/SelectUser.java
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/session1/hibernate.cfg.xml
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/session2/hibernate.cfg.xml
 delete mode 100644 ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml
 create mode 100644 ws/eclipse/HibIntro/src/main/resources/META-INF/persistence.xml

diff --git a/ws/eclipse/HibIntro/.project b/ws/eclipse/HibIntro/.project
index 618846d5e..1b0bf4985 100644
--- a/ws/eclipse/HibIntro/.project
+++ b/ws/eclipse/HibIntro/.project
@@ -5,13 +5,18 @@
 	<projects>
 	</projects>
 	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.jdt.core.javabuilder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>org.hibernate.eclipse.console.hibernateBuilder</name>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
 			<arguments>
 			</arguments>
 		</buildCommand>
@@ -24,6 +29,6 @@
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.hibernate.eclipse.console.hibernateNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
 	</natures>
 </projectDescription>
diff --git a/ws/eclipse/HibIntro/pom.xml b/ws/eclipse/HibIntro/pom.xml
index c00c4e1de..e2fb5afcb 100644
--- a/ws/eclipse/HibIntro/pom.xml
+++ b/ws/eclipse/HibIntro/pom.xml
@@ -15,45 +15,59 @@
 	</properties>
 
 	<dependencies>
+
+
 		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>3.8.1</version>
-			<scope>test</scope>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-entitymanager</artifactId>
+			<version>5.1.0.Final</version>
 		</dependency>
 
 		<dependency>
 			<groupId>mysql</groupId>
 			<artifactId>mysql-connector-java</artifactId>
-			<version>5.1.22</version>
-			<scope>runtime</scope>
+			<version>5.1.38</version>
 		</dependency>
 
-		<dependency>
-			<groupId>org.hibernate</groupId>
-			<artifactId>hibernate-core</artifactId>
-			<version>4.1.9.Final</version>
-		</dependency>
-		<dependency>
-			<groupId>org.jdom</groupId>
-			<artifactId>jdom</artifactId>
-			<version>2.0.2</version>
-		</dependency>
-		<dependency>
-			<groupId>org.testng</groupId>
-			<artifactId>testng</artifactId>
-			<version>6.8</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-			<version>1.7.5</version>
-		</dependency>
+<!-- 		<dependency> -->
+<!-- 			<groupId>junit</groupId> -->
+<!-- 			<artifactId>junit</artifactId> -->
+<!-- 			<version>4.12</version> -->
+<!-- 		</dependency> -->
+
+
+<!-- 		<dependency> -->
+<!-- 			<groupId>mysql</groupId> -->
+<!-- 			<artifactId>mysql-connector-java</artifactId> -->
+<!-- 			<version>5.1.22</version> -->
+<!-- 			<scope>runtime</scope> -->
+<!-- 		</dependency> -->
+
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.hibernate</groupId> -->
+<!-- 			<artifactId>hibernate-core</artifactId> -->
+<!-- 			<version>4.1.9.Final</version> -->
+<!-- 		</dependency> -->
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.jdom</groupId> -->
+<!-- 			<artifactId>jdom</artifactId> -->
+<!-- 			<version>2.0.2</version> -->
+<!-- 		</dependency> -->
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.testng</groupId> -->
+<!-- 			<artifactId>testng</artifactId> -->
+<!-- 			<version>6.8</version> -->
+<!-- 		</dependency> -->
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.slf4j</groupId> -->
+<!-- 			<artifactId>slf4j-api</artifactId> -->
+<!-- 			<version>1.7.5</version> -->
+<!-- 		</dependency> -->
+<!-- 		<dependency> -->
+<!-- 			<groupId>org.slf4j</groupId> -->
+<!-- 			<artifactId>slf4j-log4j12</artifactId> -->
+<!-- 			<version>1.7.5</version> -->
+<!-- 		</dependency> -->
 	</dependencies>
 	<build>
 		<plugins>
@@ -62,11 +76,12 @@
 				<artifactId>maven-compiler-plugin</artifactId>
 				<version>2.3.2</version>
 				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
+					<source>1.8</source>
+					<target>1.8</target>
 				</configuration>
 			</plugin>
 		</plugins>
+<!-- 
 		<resources>
 			<resource>
 				<directory>src/main/java</directory>
@@ -76,6 +91,8 @@
 				</includes>
 			</resource>
 		</resources>
+
+ -->
 	</build>
 
 </project>
diff --git a/ws/eclipse/HibIntro/src/main/java/component/address/ModifyWorkAddress.java b/ws/eclipse/HibIntro/src/main/java/component/address/ModifyWorkAddress.java
index 6b4fdb119..06f16d788 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/address/ModifyWorkAddress.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/address/ModifyWorkAddress.java
@@ -1,22 +1,14 @@
 package component.address;
 
-
-
-import hibintro.util.HibernateUtil;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.DefaultComponentSafeNamingStrategy;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Modify embedded content in a persistent {@link User} instance.
  *
  */
 public class ModifyWorkAddress {
-  static {
-    HibernateUtil.configuration.setNamingStrategy(new DefaultComponentSafeNamingStrategy());
-  }
 
    /**
     * Retrieving a single {@link User} instance by means
@@ -24,16 +16,19 @@ public class ModifyWorkAddress {
     * @param args unused
     */
    public static void main(String[] args) {
+      
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("componentAddressPU");
+      final EntityManager em = factory.createEntityManager();
 
+      em.getTransaction().begin();
       {
-         final Session session = HibernateUtil.createSessionFactory("component/address/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         final User user = (User) session.load(User.class, 1L);
-
+         final User user = em.find(User.class, 1L);
          user.getWorkAddress().setStreet("100 Baker St");
-         
-         transaction.commit();
-         session.close();
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/component/address/PersistUser.java b/ws/eclipse/HibIntro/src/main/java/component/address/PersistUser.java
index 32a410a7f..4058d67f6 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/address/PersistUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/address/PersistUser.java
@@ -1,36 +1,32 @@
 package component.address;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.cfg.DefaultComponentSafeNamingStrategy;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting {@link User} instances having component E-Mail Addresses
  *
  */
 public class PersistUser {
-  
-  static {
-    HibernateUtil.configuration.setNamingStrategy(new DefaultComponentSafeNamingStrategy());
-  }
    /**
     * @param args not used.
     */
    public static void main(String[] args) {
-     
-      final Session session = HibernateUtil.createSessionFactory("component/address/hibernate.cfg.xml").openSession();
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("componentAddressPU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
          final User u = new User(123, "goik", "Martin Goik");
          u.setHomeAddress(new Address("144 Kings Highway", "S.W. Dover", "DE 19901"));
          u.setWorkAddress(new Address("22 Baker St", "Morton", "PA 19070"));
-         session.save(u);
+         em.persist(u);
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/component/address/User.java b/ws/eclipse/HibIntro/src/main/java/component/address/User.java
index 0891a61d1..f8a1c3c9f 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/address/User.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/address/User.java
@@ -1,5 +1,7 @@
 package component.address;
 
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
 import javax.persistence.Column;
 import javax.persistence.Embedded;
 import javax.persistence.Entity;
@@ -9,9 +11,7 @@ import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
 
 /**
- * @author goik
- * 
- *         {@link User} instances with component addresses
+ *  {@link User} instances with component addresses
  * 
  */
 @Entity
@@ -49,11 +49,23 @@ public class User {
 
   private Address workAddress;
   @Embedded
+  @AttributeOverrides(
+        {@AttributeOverride(name = "city", column = @Column(name = "city_work")),
+         @AttributeOverride(name = "street", column = @Column(name = "street_work")),
+         @AttributeOverride(name = "zipcode", column = @Column(name = "zipcode_work"))
+         }
+        )
   public Address getWorkAddress() { return workAddress;}
   public void setWorkAddress(final Address workAddress) { this.workAddress = workAddress;}
 
   private Address homeAddress;
   @Embedded
+  @AttributeOverrides(
+        {@AttributeOverride(name = "city", column = @Column(name = "city_home")),
+         @AttributeOverride(name = "street", column = @Column(name = "street_home")),
+         @AttributeOverride(name = "zipcode", column = @Column(name = "zipcode_home"))
+         }
+        )
   public Address getHomeAddress() { return homeAddress;}
   public void setHomeAddress(Address homeAddress) { this.homeAddress = homeAddress;}
   
diff --git a/ws/eclipse/HibIntro/src/main/java/component/email/PersistUser.java b/ws/eclipse/HibIntro/src/main/java/component/email/PersistUser.java
index 63b6b398f..711452e79 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/email/PersistUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/email/PersistUser.java
@@ -1,13 +1,10 @@
 package component.email;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting {@link User} instances having component E-Mail Addresses
  *
  */
@@ -17,14 +14,18 @@ public class PersistUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("component/email/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("componentEmailPU");
+      final EntityManager em = factory.createEntityManager();
 
+      em.getTransaction().begin();
       {
-        final Transaction transaction = session.beginTransaction();
          final User u = new User(123, "goik", "Martin Goik");
          u.setEmailAddress(new Email("goik@hdm-stuttgart.de"));
-         session.save(u);
-         transaction.commit();
+         em.persist(u);
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/component/emails/DeleteUser.java b/ws/eclipse/HibIntro/src/main/java/component/emails/DeleteUser.java
index ef715765c..c812b854e 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/emails/DeleteUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/emails/DeleteUser.java
@@ -1,15 +1,11 @@
 package component.emails;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting {@link User} instances having component E-Mail Addresses
- *
  */
 public class DeleteUser {
 
@@ -17,13 +13,18 @@ public class DeleteUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("component/emails/hibernate.cfg.xml").openSession();
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("componentEmailsPU");
+      final EntityManager em = factory.createEntityManager();
 
+      em.getTransaction().begin();
       {
-        final Transaction transaction = session.beginTransaction();
-        final User user = (User) session.load(User.class, 1L);
-        session.delete(user);
-        transaction.commit();
+         final User user = em.find(User.class, 1L);
+         em.remove(user);
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/component/emails/PersistUser.java b/ws/eclipse/HibIntro/src/main/java/component/emails/PersistUser.java
index 8c5cf5c69..44f81a024 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/emails/PersistUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/emails/PersistUser.java
@@ -1,15 +1,11 @@
 package component.emails;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting {@link User} instances having component E-Mail Addresses
- *
  */
 public class PersistUser {
 
@@ -17,15 +13,20 @@ public class PersistUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("component/emails/hibernate.cfg.xml").openSession();
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("componentEmailsPU");
+      final EntityManager em = factory.createEntityManager();
 
+      em.getTransaction().begin();
       {
-        final Transaction transaction = session.beginTransaction();
          final User u = new User(123, "goik", "Martin Goik");
          u.getEmails().add(new Email("goik@hdm-stuttgart.de"));
          u.getEmails().add(new Email("goma@someserver.org"));
-         session.save(u);
-         transaction.commit();
+         em.persist(u);
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/component/emails/User.java b/ws/eclipse/HibIntro/src/main/java/component/emails/User.java
index eb85e0d2c..efb0d0e45 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/emails/User.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/emails/User.java
@@ -3,18 +3,19 @@ package component.emails;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.persistence.CollectionTable;
 import javax.persistence.Column;
 import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
+import javax.persistence.JoinColumn;
 
 /**
- * @author goik
- * 
- *         {@link User} instances with addresses
+ *  {@link User} instances with addresses
  * 
  */
 @Entity
@@ -24,7 +25,7 @@ public class User {
 
   private Long id;
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy = GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
 
diff --git a/ws/eclipse/HibIntro/src/main/java/component/emails/list/PersistUser.java b/ws/eclipse/HibIntro/src/main/java/component/emails/list/PersistUser.java
index 289a34593..1d7c366a7 100644
--- a/ws/eclipse/HibIntro/src/main/java/component/emails/list/PersistUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/component/emails/list/PersistUser.java
@@ -1,15 +1,11 @@
 package component.emails.list;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting {@link User} instances having component E-Mail Addresses
- *
  */
 public class PersistUser {
 
@@ -17,15 +13,19 @@ public class PersistUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("component/emails/list/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("componentEmailsListPU");
+      final EntityManager em = factory.createEntityManager();
 
+      em.getTransaction().begin();
       {
-        final Transaction transaction = session.beginTransaction();
          final User u = new User(123, "goik", "Martin Goik");
          u.getEmails().add(new Email("goik@hdm-stuttgart.de"));
          u.getEmails().add(new Email("goma@someserver.org"));
-         session.save(u);
-         transaction.commit();
+         em.persist(u);
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company1/Employee.java b/ws/eclipse/HibIntro/src/main/java/entity/company1/Employee.java
index 229f41adb..8f2c3f15e 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company1/Employee.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company1/Employee.java
@@ -2,6 +2,7 @@ package entity.company1;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -17,7 +18,7 @@ import javax.persistence.UniqueConstraint;
 public class Employee {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company1/Laptop.java b/ws/eclipse/HibIntro/src/main/java/entity/company1/Laptop.java
index 52dfb3ee1..d66e785af 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company1/Laptop.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company1/Laptop.java
@@ -2,6 +2,7 @@ package entity.company1;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -16,7 +17,7 @@ import javax.persistence.UniqueConstraint;
 public class Laptop {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist1.java b/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist1.java
index bd386e971..be9f7d5ee 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist1.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist1.java
@@ -1,30 +1,36 @@
 package entity.company1;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * Persisting {@link Employee} possibly along with
  * personal assigned laptops.
  */
 public class Persist1 {
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company1/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-                      eve = new Employee(140, "Eve Blix");
-      
-      final Laptop superCoolGadget = new Laptop(2213);
-      eve.setLaptop(superCoolGadget);
-      session.save(martin);
-      session.save(eve);
-      transaction.commit();
-    }
-  }
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany1PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final Employee  martin = new Employee(123, "Martin Goik"),
+               eve = new Employee(140, "Eve Blix");
+
+         final Laptop superCoolGadget = new Laptop(2213);
+         eve.setLaptop(superCoolGadget);
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(superCoolGadget);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist2.java b/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist2.java
index a078e3611..715f7799e 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist2.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company1/Persist2.java
@@ -1,13 +1,10 @@
 package entity.company1;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting {@link Employee} possibly along with
  * personally assigned laptops. Persisting dependent
  * transient objects corrects bug in {@link Persist1} 
@@ -15,25 +12,27 @@ import org.hibernate.Transaction;
  */
 public class Persist2 {
 
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company1/hibernate.cfg.xml").openSession();
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany1PU");
+      final EntityManager em = factory.createEntityManager();
 
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-                      eve = new Employee(140, "Eve Blix");
-      
-      final Laptop superCoolGadget = new Laptop(2213);
-      eve.setLaptop(superCoolGadget);
-      session.save(martin);
-      session.save(eve);
+      em.getTransaction().begin();
+      {
+         final Employee  martin = new Employee(123, "Martin Goik"),
+               eve = new Employee(140, "Eve Blix");
 
-      session.save(superCoolGadget);
+         final Laptop superCoolGadget = new Laptop(2213);
+         eve.setLaptop(superCoolGadget);
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(superCoolGadget);
+      }
+      em.getTransaction().commit();
 
-      transaction.commit();
-    }
-  }
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company2/Employee.java b/ws/eclipse/HibIntro/src/main/java/entity/company2/Employee.java
index a2d849672..1d1bd4c6e 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company2/Employee.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company2/Employee.java
@@ -3,6 +3,7 @@ package entity.company2;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -18,7 +19,7 @@ import javax.persistence.UniqueConstraint;
 public class Employee {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company2/Laptop.java b/ws/eclipse/HibIntro/src/main/java/entity/company2/Laptop.java
index 462aa3b7f..8a2e6863c 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company2/Laptop.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company2/Laptop.java
@@ -2,6 +2,7 @@ package entity.company2;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -16,7 +17,7 @@ import javax.persistence.UniqueConstraint;
 public class Laptop {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company2/LoadAndDeRegister.java b/ws/eclipse/HibIntro/src/main/java/entity/company2/LoadAndDeRegister.java
index b4040b6d1..8b80db1fe 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company2/LoadAndDeRegister.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company2/LoadAndDeRegister.java
@@ -1,9 +1,8 @@
 package entity.company2;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * Removing {@link Laptop} from {@link Employee} 
@@ -13,14 +12,18 @@ public class LoadAndDeRegister {
    * @param args not used.
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company2/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  eve = (Employee) session.load(Employee.class, 2L);
-      
-      eve.setLaptop(null);
 
-      transaction.commit();
-    }
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany2NoDropPU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final Employee  eve = em.find(Employee.class, 2L);
+        eve.setLaptop(null);
+     }
+     em.getTransaction().commit();
+
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company2/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company2/Persist.java
index d68352e66..6174cf85d 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company2/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company2/Persist.java
@@ -1,33 +1,38 @@
 package entity.company2;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * Persisting {@link Employee} possibly along with
  * personal assigned laptops.
  */
 public class Persist {
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company2/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-                      eve = new Employee(140, "Eve Blix");
-      
-      final Laptop superCoolGadget = new Laptop(2213);
-      eve.setLaptop(superCoolGadget);
-      // Now only save the employee transients,
-      // superCoolGadget will be saved automatically due to
-      // CascadeType.ALL 
-      session.save(martin);
-      session.save(eve);
-      transaction.commit();
-    }
-  }
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany2PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final Employee  martin = new Employee(123, "Martin Goik"),
+               eve = new Employee(140, "Eve Blix");
+
+         final Laptop superCoolGadget = new Laptop(2213);
+         eve.setLaptop(superCoolGadget);
+         // Now only save the employee transients,
+         // superCoolGadget will be saved automatically due to
+         // CascadeType.ALL 
+         em.persist(martin);
+         em.persist(eve);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company3/Employee.java b/ws/eclipse/HibIntro/src/main/java/entity/company3/Employee.java
index 8fe60dbdf..d0bdc9edc 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company3/Employee.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company3/Employee.java
@@ -3,6 +3,7 @@ package entity.company3;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -18,7 +19,7 @@ import javax.persistence.UniqueConstraint;
 public class Employee {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
@@ -36,7 +37,7 @@ public class Employee {
    * 
    * @return Laptop  "owned" by {@link Employee}.
    */
-  @OneToOne(optional=false, cascade={CascadeType.ALL})
+  @OneToOne(optional=true, cascade={CascadeType.ALL})
   public Laptop getLaptop() { return laptop;}
   public void setLaptop(Laptop laptop) {this.laptop = laptop;}
   private Laptop laptop;// Workstation for employees.
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company3/Laptop.java b/ws/eclipse/HibIntro/src/main/java/entity/company3/Laptop.java
index c53d327d4..5400650dc 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company3/Laptop.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company3/Laptop.java
@@ -2,6 +2,7 @@ package entity.company3;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
@@ -16,7 +17,7 @@ import javax.persistence.UniqueConstraint;
 public class Laptop {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company3/LoadAndDeRegister.java b/ws/eclipse/HibIntro/src/main/java/entity/company3/LoadAndDeRegister.java
index 55e3deff4..3c8c69a6c 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company3/LoadAndDeRegister.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company3/LoadAndDeRegister.java
@@ -1,9 +1,8 @@
 package entity.company3;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * Removing {@link Laptop} from {@link Employee} 
@@ -13,14 +12,17 @@ public class LoadAndDeRegister {
    * @param args not used.
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company2/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  eve = (Employee) session.load(Employee.class, 2L);
-      
-      eve.setLaptop(null);
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany3NoDropPU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final Employee  eve = em.find(Employee.class, 2L);
+        eve.setLaptop(null);
+     }
+     em.getTransaction().commit();
 
-      transaction.commit();
-    }
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company3/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company3/Persist.java
index e4a3e1f89..4617eb332 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company3/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company3/Persist.java
@@ -1,33 +1,38 @@
 package entity.company3;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * Persisting {@link Employee} possibly along with
  * personal assigned laptops.
  */
 public class Persist {
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company3/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-                      eve = new Employee(140, "Eve Blix");
-      
-      final Laptop superCoolGadget = new Laptop(2213);
-      eve.setLaptop(superCoolGadget);
-      // Now only save the employee transients,
-      // superCoolGadget will be saved automatically due to
-      // CascadeType.ALL 
-      session.save(martin);
-      session.save(eve);
-      transaction.commit();
-    }
-  }
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany3PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final Employee  martin = new Employee(123, "Martin Goik"),
+               eve = new Employee(140, "Eve Blix");
+
+         final Laptop superCoolGadget = new Laptop(2213);
+         eve.setLaptop(superCoolGadget);
+         // Now only save the employee transients,
+         // superCoolGadget will be saved automatically due to
+         // CascadeType.ALL 
+         em.persist(martin);
+         em.persist(eve);
+
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company4/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company4/Persist.java
index ae153a163..32ef46771 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company4/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company4/Persist.java
@@ -1,38 +1,43 @@
 package entity.company4;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * Persisting {@link Employee} possibly along with
  * personal assigned laptops.
  */
 public class Persist {
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company4/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-                      eve = new Employee(140, "Eve Blix");
-      
-      final Laptop superCoolGadget = new Laptop(2213),
-          g2 = new Laptop(2214),
-          g3 = new Laptop(2215); // Not being referenced later
-      
-      martin.setLaptop(g2);
-      eve.setLaptop(superCoolGadget);
-      // Now only save the employee transients,
-      // superCoolGadget will be saved automatically due to
-      // CascadeType.ALL 
-      session.save(martin);
-      session.save(eve);
-      session.save(g3);
-      transaction.commit();
-    }
-  }
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany4PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final Employee  martin = new Employee(123, "Martin Goik"),
+               eve = new Employee(140, "Eve Blix");
+
+         final Laptop superCoolGadget = new Laptop(2213),
+               g2 = new Laptop(2214),
+               g3 = new Laptop(2215); // Not being referenced later
+
+         martin.setLaptop(g2);
+         eve.setLaptop(superCoolGadget);
+         // Now only save the employee transients,
+         // superCoolGadget will be saved automatically due to
+         // CascadeType.ALL 
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(g3);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company5/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company5/Persist.java
index 92d009745..d9ccc0aac 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company5/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company5/Persist.java
@@ -1,9 +1,8 @@
 package entity.company5;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 import entity.company5.model.Employee;
 import entity.company5.model.Laptop;
@@ -13,29 +12,35 @@ import entity.company5.model.Laptop;
  * personal assigned laptops.
  */
 public class Persist {
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company5/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany5PU");
+      final EntityManager em = factory.createEntityManager();
+
       final Employee  martin = new Employee(123, "Martin Goik"),
-                      eve = new Employee(140, "Eve Blix");
-      
+            eve = new Employee(140, "Eve Blix");
+
       final Laptop superCoolGadget = new Laptop(2213),
-          g2 = new Laptop(2214),
-          g3 = new Laptop(2215); // Not being referenced later
-      
+            g2 = new Laptop(2214),
+            g3 = new Laptop(2215); // Not being referenced later
+
       martin.setLaptop(g2);
       eve.setLaptop(superCoolGadget);
-      // Now only save the employee transients,
-      // superCoolGadget will be saved automatically due to
-      // CascadeType.ALL 
-      session.save(martin);
-      session.save(eve);
-      session.save(g3);
-      transaction.commit();
-    }
-  }
+
+      em.getTransaction().begin();
+      {
+         // Now only save the employee transients,
+         // superCoolGadget will be saved automatically due to
+         // CascadeType.ALL 
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(g3);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company6/ExchangeLaptops.java b/ws/eclipse/HibIntro/src/main/java/entity/company6/ExchangeLaptops.java
index e0cd59a3b..88fc6e785 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company6/ExchangeLaptops.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company6/ExchangeLaptops.java
@@ -1,9 +1,8 @@
 package entity.company6;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 import entity.company6.model.Employee;
 import entity.company6.model.Laptop;
@@ -16,25 +15,29 @@ public class ExchangeLaptops {
    * @param args not used.
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company6/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee martin = (Employee) session.load(Employee.class, 1L),
-          eve = (Employee) session.load(Employee.class, 2L);
-      
-      final Laptop currentMartin2214 = (Laptop) session.load(Laptop.class, 1L),
-          currentEve2213 = (Laptop) session.load(Laptop.class, 2L);
-      
-      eve.setLaptop(currentMartin2214);
-      currentEve2213.setOwner(martin);
-      
-      System.out.println("Martin:" + martin.getLaptop().getId());
-      System.out.println("Eve:" + eve.getLaptop().getId());
-      
-      System.out.println("currentEve2213:" + currentEve2213.getOwner().getCname());
-      System.out.println("currentMartin2214:" + currentMartin2214.getOwner().getCname());
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany6NoDropPU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final Employee martin = em.find(Employee.class, 1L),
+              eve = (Employee) em.find(Employee.class, 2L);
+          
+          final Laptop currentMartin2214 = em.find(Laptop.class, 1L),
+              currentEve2213 = em.find(Laptop.class, 2L);
+          
+          eve.setLaptop(currentMartin2214);
+          currentEve2213.setOwner(martin);
+          
+          System.out.println("Martin:" + martin.getLaptop().getId());
+          System.out.println("Eve:" + eve.getLaptop().getId());
+          
+          System.out.println("currentEve2213:" + currentEve2213.getOwner().getCname());
+          System.out.println("currentMartin2214:" + currentMartin2214.getOwner().getCname());
+     }
+     em.getTransaction().commit();
 
-      transaction.commit();
-    }
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company6/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company6/Persist.java
index 4e9204dc1..9367bda1e 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company6/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company6/Persist.java
@@ -1,34 +1,39 @@
 package entity.company6;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 import entity.company6.model.Employee;
 import entity.company6.model.Laptop;
 
 public class Persist {
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company6/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany6PU");
+      final EntityManager em = factory.createEntityManager();
+
       final Employee  martin = new Employee(123, "Martin Goik"),
-          eve = new Employee(140, "Eve Blix");
+            eve = new Employee(140, "Eve Blix");
 
       final Laptop superCoolGadget = new Laptop(2213),
-          g2 = new Laptop(2214),
-          g3 = new Laptop(2215); // Not being referenced later
+            g2 = new Laptop(2214),
+            g3 = new Laptop(2215); // Not being referenced later
 
       martin.setLaptop(g2);
       eve.setLaptop(superCoolGadget);
-      // Now only save the employee transients,
-      // superCoolGadget will be saved automatically due to
-      // CascadeType.ALL 
-      session.save(martin);
-      session.save(eve);
-      session.save(g3);
-      transaction.commit();
-    }
-  }
+
+      em.getTransaction().begin();
+      {
+         // Now only save the employee transients,
+         // superCoolGadget will be saved automatically due to
+         // CascadeType.ALL 
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(g3);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Employee.java b/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Employee.java
index 38eb94a33..389f11da7 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Employee.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Employee.java
@@ -3,6 +3,7 @@ package entity.company6.model;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -19,7 +20,7 @@ import javax.persistence.UniqueConstraint;
 public class Employee {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Laptop.java b/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Laptop.java
index be9c00a1e..6821798b4 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Laptop.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company6/model/Laptop.java
@@ -3,6 +3,7 @@ package entity.company6.model;
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
@@ -19,7 +20,7 @@ import javax.persistence.UniqueConstraint;
 public class Laptop {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company7/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company7/Persist.java
index 29349ce32..07c2817e5 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company7/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company7/Persist.java
@@ -1,42 +1,44 @@
 package entity.company7;
 
-import hibintro.util.HibernateUtil;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
-import org.hibernate.Session;
-import org.hibernate.Transaction;
 
 import entity.company7.model.Employee;
 import entity.company7.model.Project;
 
-
-
 /**
  * Defining many-to-many relationship between
  * {@link Employee} and {@link Project}
  *
  */
 public class Persist {
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company7/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-          eve = new Employee(140, "Eve Blix"),
-          jim = new Employee(160, "Jim Clarke");
-      
-      session.save(martin);
-      session.save(eve);
-      session.save(jim);
-
-      final Project water = new Project(1, "Water supply")
-      ,health = new Project(2, "Health management");
- 
-      session.save(water);
-      session.save(health);
-      
-      martin.addProject(water);
-
-      transaction.commit();
-    }
-  }
+   public static void main(String[] args) {
+
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany7PU");
+      final EntityManager em = factory.createEntityManager();
+      em.getTransaction().begin();
+      {
+         final Employee  martin = new Employee(123, "Martin Goik"),
+               eve = new Employee(140, "Eve Blix"),
+               jim = new Employee(160, "Jim Clarke");
+
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(jim);
+
+         final Project water = new Project(1, "Water supply")
+               ,health = new Project(2, "Health management");
+
+         em.persist(water);
+         em.persist(health);
+
+         martin.addProject(water);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company7/ReassignProjects.java b/ws/eclipse/HibIntro/src/main/java/entity/company7/ReassignProjects.java
index dfae7b4f7..44a805f05 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company7/ReassignProjects.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company7/ReassignProjects.java
@@ -1,44 +1,44 @@
 package entity.company7;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Criteria;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.criterion.Restrictions;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 import entity.company7.model.Employee;
 import entity.company7.model.Project;
 
 public class ReassignProjects {
-   
-  public static void main(String[] args) {
-     
-     
-     
-    final Session session = HibernateUtil.createSessionFactory("entity/company7/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      
-      final Employee
-         martin = (Employee) session.createCriteria(Employee.class).add(
-                     Restrictions.eq("staffNumber", 123)).list().get(0)
-           ,eve = (Employee) session.createCriteria(Employee.class).add(
-                     Restrictions.eq("staffNumber", 140)). list().get(0)
-           ,jim = (Employee) session.createCriteria(Employee.class).add(
-                     Restrictions.eq("staffNumber", 160)). list().get(0);
-      
-      final Criteria searchProject = session.createCriteria(Project.class);
-      
-      final Project water = (Project) searchProject.add(Restrictions.eq("no", 1)).list().get(0);
-      martin.removeProject(water);
-      
-      eve.addProject(water);
-      jim.addProject(water);
-      session.save(martin);
-      session.save(eve);
-      session.save(jim);
-      transaction.commit();
-    }
-  }
+
+   public static void main(String[] args) {
+
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany7NoDropPU");
+      final EntityManager em = factory.createEntityManager();
+      em.getTransaction().begin();
+      {
+         final TypedQuery<Employee> queryEmployee = em.createQuery(
+               "SELECT e FROM Employee e WHERE e.staffNumber = :staffNumber", Employee.class);
+
+         final Employee
+         martin = queryEmployee.setParameter("staffNumber", 123).getSingleResult(),
+         eve = queryEmployee.setParameter("staffNumber", 140).getSingleResult(),
+         jim = queryEmployee.setParameter("staffNumber", 160).getSingleResult();
+
+         final TypedQuery<Project> queryProject = em.createQuery(
+               "SELECT p FROM Project p WHERE p.no = :no", Project.class);
+
+         final Project water = queryProject.setParameter("no", 1).getSingleResult();
+         martin.removeProject(water);
+
+         eve.addProject(water);
+         jim.addProject(water);
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(jim);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Employee.java b/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Employee.java
index ef7aefd54..023adc90a 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Employee.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Employee.java
@@ -5,6 +5,7 @@ import java.util.Set;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToMany;
 import javax.persistence.Table;
@@ -22,7 +23,7 @@ import javax.persistence.UniqueConstraint;
 public class Employee {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Project.java b/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Project.java
index 2195a71c2..3feee7915 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Project.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company7/model/Project.java
@@ -5,6 +5,7 @@ import java.util.Set;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToMany;
 import javax.persistence.Table;
@@ -20,7 +21,7 @@ import javax.persistence.UniqueConstraint;
 public class Project {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company8/Persist.java b/ws/eclipse/HibIntro/src/main/java/entity/company8/Persist.java
index f47fc6816..5b60a8bee 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company8/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company8/Persist.java
@@ -1,16 +1,13 @@
 package entity.company8;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 import entity.company8.model.Employee;
 import entity.company8.model.Project;
 
 
-
-
 /**
  * Defining many-to-many relationship between
  * {@link Employee} and {@link Project}
@@ -18,27 +15,30 @@ import entity.company8.model.Project;
  */
 public class Persist {
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("entity/company8/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      final Employee  martin = new Employee(123, "Martin Goik"),
-          eve = new Employee(140, "Eve Blix"),
-          jim = new Employee(160, "Jim Clarke");
-      
-      session.save(martin);
-      session.save(eve);
-      session.save(jim);
-
-      final Project water = new Project(1, "Water supply")
-      ,health = new Project(2, "Health management");
- 
-      water.addEmployee(martin);
-      water.addEmployee(eve);
-      session.save(water);
-      session.save(health);
-      
-      
-      transaction.commit();
-    }
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany8PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final Employee  martin = new Employee(123, "Martin Goik"),
+              eve = new Employee(140, "Eve Blix"),
+              jim = new Employee(160, "Jim Clarke");
+          
+          em.persist(martin);
+          em.persist(eve);
+          em.persist(jim);
+
+          final Project water = new Project(1, "Water supply")
+          ,health = new Project(2, "Health management");
+     
+          water.addEmployee(martin);
+          water.addEmployee(eve);
+          em.persist(water);
+          em.persist(health);
+     }
+     em.getTransaction().commit();
+
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company8/ReassignProjects.java b/ws/eclipse/HibIntro/src/main/java/entity/company8/ReassignProjects.java
index 73ef378d0..f443df041 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company8/ReassignProjects.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company8/ReassignProjects.java
@@ -1,48 +1,43 @@
 package entity.company8;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Criteria;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-import org.hibernate.criterion.Restrictions;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 import entity.company8.model.Employee;
 import entity.company8.model.Project;
 
 public class ReassignProjects {
-   
-  public static void main(String[] args) {
-     
-     
-     
-    final Session session = HibernateUtil.createSessionFactory("entity/company8/hibernate.cfg.xml").openSession();
-    {
-      final Transaction transaction = session.beginTransaction();
-      
-      final Employee
-         martin = (Employee) session.createCriteria(Employee.class).add(
-                     Restrictions.eq("staffNumber", 123)).list().get(0)
-                     
-           ,eve = (Employee) session.createCriteria(Employee.class).add(
-                     Restrictions.eq("staffNumber", 140)). list().get(0)
-                     
-           ,jim = (Employee) session.createCriteria(Employee.class).add(
-                     Restrictions.eq("staffNumber", 160)). list().get(0);
-      
-      final Criteria searchProject = session.createCriteria(Project.class);
-      
-      final Project water = (Project) searchProject.add(
-            Restrictions.eq("no", 1)).list().get(0);
-
-      water.removeEmployee(martin);
-      water.addEmployee(jim);
-      
-      
-      session.save(martin);
-      session.save(eve);
-      session.save(jim);
-      transaction.commit();
-    }
-  }
+
+   public static void main(String[] args) {
+
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("entityCompany8NoDropPU");
+      final EntityManager em = factory.createEntityManager();
+      em.getTransaction().begin();
+      {
+         final TypedQuery<Employee> queryEmployee = em.createQuery(
+               "SELECT e FROM Employee e WHERE e.staffNumber = :staffNumber", Employee.class);
+
+         final Employee
+         martin = queryEmployee.setParameter("staffNumber", 123).getSingleResult(),
+         eve = queryEmployee.setParameter("staffNumber", 140).getSingleResult(),
+         jim = queryEmployee.setParameter("staffNumber", 160).getSingleResult();
+
+         final TypedQuery<Project> queryProject = em.createQuery(
+               "SELECT p FROM Project p WHERE p.no = :no", Project.class);
+
+         final Project water = queryProject.setParameter("no", 1).getSingleResult();
+         water.removeEmployee(martin);
+         water.addEmployee(jim);
+
+         em.persist(martin);
+         em.persist(eve);
+         em.persist(jim);
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Employee.java b/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Employee.java
index 8a8e36bf1..03c70e2f6 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Employee.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Employee.java
@@ -7,6 +7,7 @@ import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -27,7 +28,7 @@ import org.hibernate.annotations.Cascade;
 public class Employee {
 
   @Id
-  @GeneratedValue
+  @GeneratedValue(strategy=GenerationType.IDENTITY)
   public Long getId() {return id;}
   protected void setId(Long id) {this.id = id;}
   private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Project.java b/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Project.java
index 7edf6f974..eee2a5da8 100644
--- a/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Project.java
+++ b/ws/eclipse/HibIntro/src/main/java/entity/company8/model/Project.java
@@ -7,6 +7,7 @@ import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -26,7 +27,7 @@ import org.hibernate.annotations.Cascade;
 public class Project {
 
    @Id
-   @GeneratedValue
+   @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Long getId() {return id;}
    protected void setId(Long id) {this.id = id;}
    private Long id;
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/util/HibernateUtil.java b/ws/eclipse/HibIntro/src/main/java/hibintro/util/HibernateUtil.java
deleted file mode 100644
index 48e85c1d9..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/util/HibernateUtil.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package hibintro.util;
-
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
-import org.hibernate.service.ServiceRegistryBuilder;
-
-/**
- * @author goik
- * 
- * Useful helper for creating hibernate session instances
- *
- */
-public class HibernateUtil {
-
-  public static final Configuration configuration = new Configuration();
-
-  /**
-   * 
-   * @param hibernateConfigFileName The filename defaults to <code>hibernate.cfg.xml</code>.
-   * @return Session factory instance to be used for actual session creation by caller.
-   */
-  public static SessionFactory createSessionFactory(final String hibernateConfigFileName) {
-    
-    configuration.configure(hibernateConfigFileName);
-    ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
-        .getProperties());
-    return configuration
-        .buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetSingleUser.java
new file mode 100644
index 000000000..311285856
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetSingleUser.java
@@ -0,0 +1,36 @@
+package hibintro.v1;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+/**
+ * Retrieval of a single {@link User} object from a database.
+ *
+ */
+public class GetSingleUser {
+
+  /**
+   * Retrieving a single {@link User} instance by means
+   * of its primary key value "goik".
+   * @param args unused
+   */
+  public static void main(String[] args) {
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final User u = em.find(User.class, "goik");
+        if (null == u ) {
+          System.out.println("No such user 'goik'");
+        } else {
+          System.out.println("Found user '" + u.getCname() + "'");
+        }
+     }
+     em.getTransaction().commit();
+
+     em.close();
+     factory.close();
+  }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetUsersAsAttributes.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetUsersAsAttributes.java
new file mode 100644
index 000000000..cc2bd4a79
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/GetUsersAsAttributes.java
@@ -0,0 +1,46 @@
+package hibintro.v1;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.Query;
+
+/**
+ * Retrieval all {@link User} attributes from a database.
+ *
+ */
+public class GetUsersAsAttributes {
+
+   /**
+    * Retrieving a single {@link User} instance by means
+    * of its primary key value "goik".
+    * @param args unused
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final Query queryUidCname = em.createQuery("select uid, cname from User");
+
+         @SuppressWarnings("unchecked")
+         final List<Object> usersAttributes = queryUidCname.getResultList();
+
+         System.out.println("queryResult type:" + usersAttributes.get(0).getClass().getSimpleName());
+         for (final Object o: usersAttributes) {
+            System.out.println("result set element type:" + o.getClass().getSimpleName());
+            final Object attributes[] = (Object []) o;
+            for (Object attribute: attributes) {
+               System.out.println("attribute value:" + attribute);
+            }
+         }
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistSingleUser.java
new file mode 100644
index 000000000..b77eb8a3b
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistSingleUser.java
@@ -0,0 +1,28 @@
+package hibintro.v1;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+/**
+ * Persisting a simple instance of {@link User}
+ */
+public class PersistSingleUser {
+
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         em.persist(new User("goik", "Martin Goik"));
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistUsers.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistUsers.java
new file mode 100644
index 000000000..8f1dd196a
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/PersistUsers.java
@@ -0,0 +1,33 @@
+package hibintro.v1;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+/**
+ * Persisting a simple instance of {@link User}
+ *
+ */
+public class PersistUsers {
+
+   /**
+    * @param args not used.
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final User users[] = {new User("wings", "Fred Wings"),
+               new User("eve", "Eve Briggs")} ;
+         for (final User u : users ) {
+            em.persist(u);
+         }
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveAll.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveAll.java
new file mode 100644
index 000000000..e91406e09
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveAll.java
@@ -0,0 +1,38 @@
+package hibintro.v1;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
+
+/**
+ * Retrieval of all {@link User} objects from a database.
+ */
+public class RetrieveAll {
+
+   /**
+    * Retrieving users containing the letter <code>r</code> in
+    * {@link User#getCname()}.
+    * 
+    * @param args unused
+    */
+   public static void main(String[] args) {
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+      final EntityManager em = factory.createEntityManager();
+
+      em.getTransaction().begin();
+      {
+         final TypedQuery<User> searchUsers = em.createQuery("from User", User.class);
+         final List<User> users = searchUsers.getResultList();
+         for (final User u: users) {
+            System.out.println("uid=" + u.getUid() + ", " + u.getCname());
+         }
+      }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
+   }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveSingleUser.java
new file mode 100644
index 000000000..666acf758
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/RetrieveSingleUser.java
@@ -0,0 +1,36 @@
+package hibintro.v1;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+/**
+ * Retrieval of a single {@link User} object from a database.
+ *
+ */
+public class RetrieveSingleUser {
+
+  /**
+   * Retrieving a single {@link User} instance by means
+   * of its primary key value "goik".
+   * @param args unused
+   */
+  public static void main(String[] args) {
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final User u = em.find(User.class, "goik");
+        if (null == u ) {
+          System.out.println("No such user 'goik'");
+        } else {
+          System.out.println("Found user '" + u.getCname() + "'");
+        }
+     }
+     em.getTransaction().commit();
+
+     em.close();
+     factory.close();
+  }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/SelectUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/SelectUser.java
new file mode 100644
index 000000000..fee3e40ba
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/SelectUser.java
@@ -0,0 +1,38 @@
+package hibintro.v1;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
+
+/**
+ * Retrieval of {@link User} objects from a database.
+ *
+ */
+public class SelectUser {
+
+  /**
+   * @param args not used.
+   */
+  public static void main(String[] args) {
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV1PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final TypedQuery<User> query = em.createQuery(
+              "from User u where u.cname like '%e%'", User.class);
+        
+        final List<User> users = query.getResultList();
+        for (final User u: users) {
+          System.out.println("Found user '" + u.getCname() + "'");
+        }
+     }
+     em.getTransaction().commit();
+
+     em.close();
+     factory.close();
+  }
+}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/model/User.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/User.java
similarity index 95%
rename from ws/eclipse/HibIntro/src/main/java/hibintro/v1/model/User.java
rename to ws/eclipse/HibIntro/src/main/java/hibintro/v1/User.java
index ca9b3e9a8..c3c296209 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/model/User.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/User.java
@@ -1,11 +1,9 @@
-package hibintro.v1.model;
+package hibintro.v1;
 
 import javax.persistence.Entity;
 import javax.persistence.Id;
 
 /**
- * @author goik
- * 
  * A simple class intended to be mapped to a database server
  *
  */
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetSingleUser.java
deleted file mode 100644
index 2c873afb7..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetSingleUser.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-
-/**
- * @author goik
- * 
- * Retrieval of a single {@link User} object from a database.
- *
- */
-public class GetSingleUser {
-
-  /**
-   * Retrieving a single {@link User} instance by means
-   * of its primary key value "goik".
-   * @param args unused
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final User u = (User) session.load(User.class, "goik");
-    if (null == u ) {
-      System.out.println("No such user 'goik'");
-    } else {
-      System.out.println("Found user '" + u.getCname() + "'");
-    }
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetUsersAsAttributes.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetUsersAsAttributes.java
deleted file mode 100644
index 97a1c8665..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/GetUsersAsAttributes.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import java.util.List;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-/**
- * @author goik
- * 
- * Retrieval all {@link User} attributes from a database.
- *
- */
-public class GetUsersAsAttributes {
-
-  /**
-   * Retrieving a single {@link User} instance by means
-   * of its primary key value "goik".
-   * @param args unused
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final Query searchUsers = session.createQuery("select uid, cname from User");
-
-    final Object queryResult = searchUsers.list();
-    System.out.println("queryResult type:" + queryResult.getClass().getSimpleName());
-    @SuppressWarnings("unchecked")
-    final List<Object> usersAttributes = (List<Object>) queryResult;
-    for (final Object o: usersAttributes) {
-      System.out.println("result set element type:" + o.getClass().getSimpleName());
-      final Object attributes[] = (Object []) o;
-      for (Object attribute: attributes) {
-        System.out.println("attribute value:" + attribute);
-      }
-    }
-
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistSingleUser.java
deleted file mode 100644
index b7037c50b..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistSingleUser.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-
-/**
- * @author goik
- * 
- * Persisting a simple instance of {@link User}
- *
- */
-public class PersistSingleUser {
-
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final User u = new User("goik", "Martin Goik");
-    session.save(u);
-
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistUsers.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistUsers.java
deleted file mode 100644
index accd388c2..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/PersistUsers.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package hibintro.v1.run;
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-/**
- * @author goik
- * 
- * Persisting a simple instance of {@link User}
- *
- */
-public class PersistUsers {
-
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final User users[] = {new User("wings", "Fred Wings"),
-        new User("eve", "Eve Briggs")} ;
-    for (final User u : users ) {
-      session.save(u);
-    }
-
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAll.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAll.java
deleted file mode 100644
index b211a573b..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAll.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import java.util.List;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-
-/**
- * @author goik
- * 
- * Retrieval of all {@link User} objects from a database.
- *
- */
-public class RetrieveAll {
-
-  /**
-   * Retrieving users containing the letter <code>r</code> in
-   * {@link User#getCname()}.
-   * 
-   * @param args unused
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final Query searchUsers = session.createQuery("from User");
-    @SuppressWarnings("unchecked")
-    final List<User> users = (List<User>) searchUsers.list();
-    for (final User u: users) {
-      System.out.println("uid=" + u.getUid() + ", " + u.getCname());
-    }
-
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAllByCriteria.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAllByCriteria.java
deleted file mode 100644
index 43a36a873..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveAllByCriteria.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import java.util.List;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-
-/**
- * @author goik
- * 
- * Retrieval of all {@link User} objects from a database.
- *
- */
-public class RetrieveAllByCriteria {
-
-  /**
-   * Retrieving users containing the letter <code>r</code> in
-   * {@link User#getCname()}.
-   * 
-   * @param args unused
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-    
-    //final Criteria crit = session.createCriteria(Cat.class);
-
-    final Transaction transaction = session.beginTransaction();
-    
-    final Query searchUsers = session.createQuery("from User");
-    @SuppressWarnings("unchecked")
-    final List<User> users = (List<User>) searchUsers.list();
-    for (final User u: users) {
-      System.out.println("uid=" + u.getUid() + ", " + u.getCname());
-    }
-
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveSingleUser.java
deleted file mode 100644
index 056ec3f0b..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/RetrieveSingleUser.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-
-/**
- * @author goik
- * 
- * Retrieval of a single {@link User} object from a database.
- *
- */
-public class RetrieveSingleUser {
-
-  /**
-   * Retrieving a single {@link User} instance by means
-   * of its primary key value "goik".
-   * @param args unused
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final User u = (User) session.load(User.class, "goik");
-    if (null == u ) {
-      System.out.println("No such user 'goik'");
-    } else {
-      System.out.println("Found user '" + u.getCname() + "'");
-    }
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/SelectUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/SelectUser.java
deleted file mode 100644
index 15469f592..000000000
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v1/run/SelectUser.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package hibintro.v1.run;
-
-
-
-import hibintro.util.HibernateUtil;
-import hibintro.v1.model.User;
-
-import java.util.List;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
-
-/**
- * @author goik
- * 
- * Retrieval of {@link User} objects from a database.
- *
- */
-public class SelectUser {
-
-  /**
-   * @param args not used.
-   */
-  public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    @SuppressWarnings("unchecked")
-    final List<User> users = (List<User>) session.createQuery("from User u where u.cname like '%e%'").list();
-    for (final User u: users) {
-      System.out.println("Found user '" + u.getCname() + "'");
-    }
-
-    transaction.commit();
-  }
-}
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v2/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v2/PersistSingleUser.java
index 71f9464a7..c08462c67 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v2/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v2/PersistSingleUser.java
@@ -1,19 +1,11 @@
 package hibintro.v2;
 
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
- *
  */
 public class PersistSingleUser {
 
@@ -21,13 +13,16 @@ public class PersistSingleUser {
    * @param args not used.
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibintro/v2/hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV2PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final User u = new User("goik", "Martin Goik");
-    session.save(u);
+     em.getTransaction().begin();
+     {
+        em.persist(new User("goik", "Martin Goik"));
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v3/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v3/PersistSingleUser.java
index ab1d36301..e9810780b 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v3/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v3/PersistSingleUser.java
@@ -1,19 +1,11 @@
 package hibintro.v3;
 
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
- *
  */
 public class PersistSingleUser {
 
@@ -21,13 +13,17 @@ public class PersistSingleUser {
    * @param args not used.
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("hibintro/v3/hibernate.cfg.xml").openSession();
-
-    final Transaction transaction = session.beginTransaction();
-
-    final User u = new User("goik", "Martin Goik");
-    session.save(u);
-
-    transaction.commit();
+     
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV3PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        em.persist(new User("goik", "Martin Goik"));
+     }
+     em.getTransaction().commit();
+
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v4/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v4/PersistSingleUser.java
index 28c20ba41..f8610eec7 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v4/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v4/PersistSingleUser.java
@@ -1,13 +1,10 @@
 package hibintro.v4;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
  *
  */
@@ -17,13 +14,16 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("hibintro/v4/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV4PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final User u = new User("goik", null);
-         session.save(u);
+         em.persist(new User("goik", null));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java
index c3bb957ef..5d629030d 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v5/PersistSingleUser.java
@@ -1,9 +1,8 @@
 package hibintro.v5;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
  * @author goik
@@ -17,13 +16,16 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("hibintro/v5/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV5PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final User u = new User(123, "goik", "Martin Goik");
-         session.save(u);
+         em.persist(new User(123, "goik", "Martin Goik"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v6/PersistProject.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v6/PersistProject.java
index 48851b058..f983650ae 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v6/PersistProject.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v6/PersistProject.java
@@ -1,13 +1,10 @@
 package hibintro.v6;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link Project}
  *
  */
@@ -17,13 +14,16 @@ public class PersistProject {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("hibintro/v6/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV6PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final Project u = new Project("New web-server", 3);
-         session.save(u);
+         em.persist(new Project("New web-server", 3));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v7/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v7/PersistSingleUser.java
index db09474bb..30c7990bd 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v7/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v7/PersistSingleUser.java
@@ -1,15 +1,11 @@
 package hibintro.v7;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
- *
  */
 public class PersistSingleUser {
 
@@ -17,13 +13,16 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("hibintro/v7/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV7PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final User u = new User(123, "goik", "Martin Goik");
-         session.save(u);
+         em.persist(new User(123, "goik", "Martin Goik"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v8/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v8/PersistSingleUser.java
index 1c5606cf1..d1f695db4 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v8/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v8/PersistSingleUser.java
@@ -1,15 +1,11 @@
 package hibintro.v8;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
- *
  */
 public class PersistSingleUser {
 
@@ -17,13 +13,16 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("hibintro/v8/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV8PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final User u = new User(123, "goik", "Martin Goik");
-         session.save(u);
+         em.persist(new User(123, "goik", "Martin Goik"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/hibintro/v9/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/hibintro/v9/PersistSingleUser.java
index 1ce093231..d48eacf91 100644
--- a/ws/eclipse/HibIntro/src/main/java/hibintro/v9/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/hibintro/v9/PersistSingleUser.java
@@ -1,13 +1,10 @@
 package hibintro.v9;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
  *
  */
@@ -17,17 +14,20 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("hibintro/v9/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("hibintroV9PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
          final User u = new User();
          u.setUidNumber(123);
          u.setUid("goik");
          u.setCname("Martin Goik");
-         
-         session.save(u);
+         em.persist(u);
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/Persist.java b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/Persist.java
index e84d14862..0caaf0404 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/Persist.java
@@ -1,17 +1,13 @@
 package inherit.joined.v1;
 
-import hibintro.util.HibernateUtil;
-
 import java.text.ParseException;
 
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link BillingDetails}
- *
  */
 public class Persist {
 
@@ -20,16 +16,17 @@ public class Persist {
     * @throws ParseException Expiration may be mis-spelled
     */
    public static void main(String[] args) throws ParseException {
-      final Session session = HibernateUtil.createSessionFactory("inherit/joined/v1/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritJoinedV1PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final CreditCard creditCard = new CreditCard("4412 8334 4512 9416", 1, "05/18/15");
-         session.save(creditCard);
-         
-         final BankAccount bankAccount = new BankAccount("1107 2 31", "Lehman Brothers", "BARCGB22");
-         session.save(bankAccount);
+         em.persist(new CreditCard("4412 8334 4512 9416", 1, "05/18/15"));
+         em.persist(new BankAccount("1107 2 31", "Lehman Brothers", "BARCGB22"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveAll.java b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveAll.java
index 954d81da2..ed346b682 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveAll.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveAll.java
@@ -1,20 +1,12 @@
 package inherit.joined.v1;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link CreditCard} objects from a database.
- *
  */
 public class RetrieveAll {
 
@@ -22,17 +14,20 @@ public class RetrieveAll {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/joined/v1/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritJoinedV1PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final Transaction transaction = session.beginTransaction();
+     em.getTransaction().begin();
+     {
+        final TypedQuery<BillingDetails> searchBilling = em.createQuery("from BillingDetails", BillingDetails.class);
 
-    final Query searchBilling = session.createQuery("from inherit.joined.v1.BillingDetails");
-    @SuppressWarnings("unchecked")
-    final List<BillingDetails> billingDetailsList = (List<BillingDetails>) searchBilling.list();
-    for (final BillingDetails c: billingDetailsList) {
-      System.out.println(c);
-    }
+        for (final BillingDetails c: searchBilling.getResultList()) {
+          System.out.println(c);
+        }
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveCredit.java b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveCredit.java
index bf3c6e125..154cf131a 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveCredit.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v1/RetrieveCredit.java
@@ -1,20 +1,12 @@
 package inherit.joined.v1;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link CreditCard} objects from a database.
- *
  */
 public class RetrieveCredit {
 
@@ -22,17 +14,20 @@ public class RetrieveCredit {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/joined/v1/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritJoinedV1PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final Transaction transaction = session.beginTransaction();
+     em.getTransaction().begin();
+     {
+        final TypedQuery<CreditCard> searchBilling = em.createQuery("from CreditCard", CreditCard.class);
 
-    final Query searchCreditPayments = session.createQuery("from inherit.tpc.v1.CreditCard");
-    @SuppressWarnings("unchecked")
-    final List<CreditCard> creditCardList = (List<CreditCard>) searchCreditPayments.list();
-    for (final CreditCard c: creditCardList) {
-      System.out.println(c);
-    }
+        for (final CreditCard c: searchBilling.getResultList()) {
+          System.out.println(c);
+        }
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/Persist.java b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/Persist.java
index 7f65655f8..1a2ca5cf2 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/Persist.java
@@ -1,15 +1,11 @@
 package inherit.joined.v2;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link Figure}
- *
  */
 public class Persist {
 
@@ -17,16 +13,17 @@ public class Persist {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("inherit/joined/v2/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritJoinedV2PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final Circle circle = new Circle(2.3, 1.8, 3.1);
-         session.save(circle);
-         
-         final Rectangle rectangle = new Rectangle(-2,-2, 1,2);
-         session.save(rectangle);
+         em.persist(new Circle(2.3, 1.8, 3.1));
+         em.persist(new Rectangle(-2,-2, 1,2));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveAll.java b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveAll.java
index 6eb411f2d..9b6e7a875 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveAll.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveAll.java
@@ -1,20 +1,12 @@
 package inherit.joined.v2;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link Circle} objects from a database.
- *
  */
 public class RetrieveAll {
 
@@ -22,16 +14,20 @@ public class RetrieveAll {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/joined/v2/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritJoinedV2PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final TypedQuery<Figure> searchFigures = em.createQuery("from Figure", Figure.class);
 
-    final Transaction transaction = session.beginTransaction();
+        for (final Figure f: searchFigures.getResultList()) {
+          System.out.println(f);
+        }
+     }
+     em.getTransaction().commit();
 
-    final Query searchFigures = session.createQuery("from inherit.joined.v2.Figure");
-    @SuppressWarnings("unchecked")
-    final List<Figure> figureList = (List<Figure>) searchFigures.list();
-    for (final Figure c: figureList) {
-      System.out.println(c);
-    }
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveRectangles.java b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveRectangles.java
index 9e5b85f28..df2923ff3 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveRectangles.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/joined/v2/RetrieveRectangles.java
@@ -1,20 +1,12 @@
 package inherit.joined.v2;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link Circle} objects from a database.
- *
  */
 public class RetrieveRectangles {
 
@@ -22,17 +14,20 @@ public class RetrieveRectangles {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/joined/v2/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritJoinedV2PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final Transaction transaction = session.beginTransaction();
+     em.getTransaction().begin();
+     {
+        final TypedQuery<Rectangle> searchRectangles = em.createQuery("from Rectangle", Rectangle.class);
 
-    final Query searchRectangles = session.createQuery("from inherit.joined.v2.Rectangle");
-    @SuppressWarnings("unchecked")
-    final List<Rectangle> rectangleList = (List<Rectangle>) searchRectangles.list();
-    for (final Rectangle r: rectangleList) {
-      System.out.println(r);
-    }
+        for (final Rectangle r: searchRectangles.getResultList()) {
+          System.out.println(r);
+        }
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v1/Persist.java b/ws/eclipse/HibIntro/src/main/java/inherit/v1/Persist.java
index 5b55e8511..7ab086b26 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v1/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v1/Persist.java
@@ -1,17 +1,14 @@
 package inherit.v1;
 
-import hibintro.util.HibernateUtil;
 
 import java.text.ParseException;
 
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link BillingDetails}
- *
  */
 public class Persist {
 
@@ -20,16 +17,17 @@ public class Persist {
     * @throws ParseException Credit card expiration may be mis-spelled.
     */
    public static void main(String[] args) throws ParseException {
-      final Session session = HibernateUtil.createSessionFactory("inherit/v1/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV1PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final CreditCard creditCard = new CreditCard("4412 8334 4512 9416", 1, "05/18/15");
-         session.save(creditCard);
-         
-         final BankAccount bankAccount = new BankAccount("1107 2 31", "Lehman Brothers", "BARCGB22");
-         session.save(bankAccount);
+         em.persist(new CreditCard("4412 8334 4512 9416", 1, "05/18/15"));
+         em.persist(new BankAccount("1107 2 31", "Lehman Brothers", "BARCGB22"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveAll.java b/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveAll.java
index 6cd66c3ba..adf5e4cb0 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveAll.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveAll.java
@@ -1,20 +1,12 @@
 package inherit.v1;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link CreditCard} objects from a database.
- *
  */
 public class RetrieveAll {
 
@@ -22,17 +14,20 @@ public class RetrieveAll {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/v1/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV1PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final Transaction transaction = session.beginTransaction();
+     em.getTransaction().begin();
+     {
+        final TypedQuery<BillingDetails> searchBilling = em.createQuery("from BillingDetails", BillingDetails.class);
 
-    final Query searchBilling = session.createQuery("from inherit.v1.BillingDetails");
-    @SuppressWarnings("unchecked")
-    final List<BillingDetails> billingDetailsList = (List<BillingDetails>) searchBilling.list();
-    for (final BillingDetails c: billingDetailsList) {
-      System.out.println(c);
-    }
+        for (final BillingDetails c: searchBilling.getResultList()) {
+          System.out.println(c);
+        }
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveCredit.java b/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveCredit.java
index ac1459604..296eadf33 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveCredit.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v1/RetrieveCredit.java
@@ -1,20 +1,12 @@
 package inherit.v1;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link CreditCard} objects from a database.
- *
  */
 public class RetrieveCredit {
 
@@ -22,17 +14,20 @@ public class RetrieveCredit {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/v1/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV1PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final Transaction transaction = session.beginTransaction();
+     em.getTransaction().begin();
+     {
+        final TypedQuery<CreditCard> searchCreditCard = em.createQuery("from CreditCard", CreditCard.class);
 
-    final Query searchCreditPayments = session.createQuery("from inherit.v1.CreditCard");
-    @SuppressWarnings("unchecked")
-    final List<CreditCard> creditCardList = (List<CreditCard>) searchCreditPayments.list();
-    for (final CreditCard c: creditCardList) {
-      System.out.println(c);
-    }
+        for (final CreditCard c: searchCreditCard.getResultList()) {
+          System.out.println(c);
+        }
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v2/Persist.java b/ws/eclipse/HibIntro/src/main/java/inherit/v2/Persist.java
index 9f67cd016..7ede4b88f 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v2/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v2/Persist.java
@@ -1,17 +1,13 @@
 package inherit.v2;
 
-import hibintro.util.HibernateUtil;
-
 import java.text.ParseException;
 
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link BillingDetails}
- *
  */
 public class Persist {
 
@@ -20,16 +16,17 @@ public class Persist {
     * @throws ParseException Expiration may be mis-spelled.
     */
    public static void main(String[] args) throws ParseException {
-      final Session session = HibernateUtil.createSessionFactory("inherit/v2/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV2PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final CreditCard creditCard = new CreditCard("4412 8334 4512 9416", 1, "05/18/15");
-         session.save(creditCard);
-         
-         final BankAccount bankAccount = new BankAccount("1107 2 31", "Lehman Brothers", "BARCGB22");
-         session.save(bankAccount);
+         em.persist(new CreditCard("4412 8334 4512 9416", 1, "05/18/15"));
+         em.persist(new BankAccount("1107 2 31", "Lehman Brothers", "BARCGB22"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v3/Persist.java b/ws/eclipse/HibIntro/src/main/java/inherit/v3/Persist.java
index 0ce90db28..6d153bbdb 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v3/Persist.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v3/Persist.java
@@ -1,15 +1,11 @@
 package inherit.v3;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting simple instances of {@link Figure}
- *
  */
 public class Persist {
 
@@ -17,16 +13,17 @@ public class Persist {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("inherit/v3/hibernate.cfg.xml").openSession();
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV3PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final Circle creditCard = new Circle(2.3, 1.8, 3.1);
-         session.save(creditCard);
-         
-         final Rectangle bankAccount = new Rectangle(-2,-2, 1,2);
-         session.save(bankAccount);
+         em.persist(new Circle(2.3, 1.8, 3.1));
+         em.persist(new Rectangle(-2,-2, 1,2));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveAll.java b/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveAll.java
index bd7468f30..fcca484f6 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveAll.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveAll.java
@@ -1,20 +1,12 @@
 package inherit.v3;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link Circle} objects from a database.
- *
  */
 public class RetrieveAll {
 
@@ -22,16 +14,20 @@ public class RetrieveAll {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/v3/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV3PU");
+     final EntityManager em = factory.createEntityManager();
+
+     em.getTransaction().begin();
+     {
+        final TypedQuery<Figure> searchFigures = em.createQuery("from Figure", Figure.class);
 
-    final Transaction transaction = session.beginTransaction();
+        for (final Figure f: searchFigures.getResultList()) {
+          System.out.println(f);
+        }
+     }
+     em.getTransaction().commit();
 
-    final Query searchFigures = session.createQuery("from inherit.v3.Figure");
-    @SuppressWarnings("unchecked")
-    final List<Figure> figureList = (List<Figure>) searchFigures.list();
-    for (final Figure c: figureList) {
-      System.out.println(c);
-    }
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveRectangles.java b/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveRectangles.java
index ecce67be4..62a88d63c 100644
--- a/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveRectangles.java
+++ b/ws/eclipse/HibIntro/src/main/java/inherit/v3/RetrieveRectangles.java
@@ -1,20 +1,12 @@
 package inherit.v3;
 
-import java.util.List;
-
-
-
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 
 /**
- * @author goik
- * 
  * Retrieval of all {@link Circle} objects from a database.
- *
  */
 public class RetrieveRectangles {
 
@@ -22,17 +14,20 @@ public class RetrieveRectangles {
    * @param args unused
    */
   public static void main(String[] args) {
-    final Session session = HibernateUtil.createSessionFactory("inherit/v3/hibernate.cfg.xml").openSession();
+     final EntityManagerFactory factory = Persistence.createEntityManagerFactory("inheritV3PU");
+     final EntityManager em = factory.createEntityManager();
 
-    final Transaction transaction = session.beginTransaction();
+     em.getTransaction().begin();
+     {
+        final TypedQuery<Rectangle> searchRectangles = em.createQuery("from Rectangle", Rectangle.class);
 
-    final Query searchRectangles = session.createQuery("from inherit.v3.Rectangle");
-    @SuppressWarnings("unchecked")
-    final List<Rectangle> rectangleList = (List<Rectangle>) searchRectangles.list();
-    for (final Rectangle r: rectangleList) {
-      System.out.println(r);
-    }
+        for (final Rectangle r: searchRectangles.getResultList()) {
+          System.out.println(r);
+        }
+     }
+     em.getTransaction().commit();
 
-    transaction.commit();
+     em.close();
+     factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session1/LoadUser.java b/ws/eclipse/HibIntro/src/main/java/session1/LoadUser.java
index 71392eed7..d5b49c04b 100644
--- a/ws/eclipse/HibIntro/src/main/java/session1/LoadUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/session1/LoadUser.java
@@ -1,14 +1,10 @@
 package session1;
 
-
-
-import hibintro.util.HibernateUtil;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Repeated retrieval of a single {@link User} object from a database.
  *
  */
@@ -22,26 +18,26 @@ public class LoadUser {
    public static void main(String[] args) {
 
       final User user;
-      {
-         final Session session = HibernateUtil.createSessionFactory("session1/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         user = (User) session.load(User.class, 1L);
-         final User user1 = (User) session.load(User.class, 1L);
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session1PU");
+      final EntityManager em = factory.createEntityManager();
 
+      em.getTransaction().begin();
+      {
+         user = em.find(User.class, 1L);
+         final User user1 = em.find(User.class, 1L);
          System.out.println(" first transaction: user.equals(user1):" + user.equals(user1));
-
-         transaction.commit();
-         session.close();
       }
-      {
-         final Session session = HibernateUtil.createSessionFactory("session1/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         final User user2 = (User) session.load(User.class, 1L);
 
+      em.getTransaction().begin();
+      {
+         final User user2 = em.find(User.class, 1L);
          System.out.println("second transaction: user.equals(user2):" + user.equals(user2));
-
-         transaction.commit();
-         session.close();
       }
+
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session1/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/session1/PersistSingleUser.java
index e2557c17a..3adeea93d 100644
--- a/ws/eclipse/HibIntro/src/main/java/session1/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/session1/PersistSingleUser.java
@@ -1,13 +1,10 @@
 package session1;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
  *
  */
@@ -17,13 +14,18 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("session1/hibernate.cfg.xml").openSession();
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session1PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
          final User u = new User(123, "goik", "Martin Goik");
-         session.save(u);
+         em.persist(u);
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session1/hibernate.cfg.xml b/ws/eclipse/HibIntro/src/main/java/session1/hibernate.cfg.xml
deleted file mode 100644
index c5e51a96f..000000000
--- a/ws/eclipse/HibIntro/src/main/java/session1/hibernate.cfg.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE hibernate-configuration PUBLIC
-	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-	"http://www.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">XYZ</property>
-  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hdm</property>
-  <property name="hibernate.connection.username">hdmuser</property>
-  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
-  <property name="hibernate.show_sql">false</property>
-  <property name="hibernate.format_sql">true</property>
-  <property name="hibernate.hbm2ddl.auto">update</property>
-  
-  <mapping class="session1.User"/>
- </session-factory>
-</hibernate-configuration>
diff --git a/ws/eclipse/HibIntro/src/main/java/session2/CompareNewlyCreated.java b/ws/eclipse/HibIntro/src/main/java/session2/CompareNewlyCreated.java
index b5c999a53..a44b03169 100644
--- a/ws/eclipse/HibIntro/src/main/java/session2/CompareNewlyCreated.java
+++ b/ws/eclipse/HibIntro/src/main/java/session2/CompareNewlyCreated.java
@@ -1,12 +1,10 @@
 package session2;
 
-import hibintro.util.HibernateUtil;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Comparing newly created {@link User} instances both with persistent
  * and transient partners.
  *
@@ -20,18 +18,20 @@ public class CompareNewlyCreated {
         b = new User(123, "goik", "Martin Goik");
 
     System.out.println("a.equals(b):" + a.equals(b));
+    
+    final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session2PU");
+    final EntityManager em = factory.createEntityManager();
 
+    em.getTransaction().begin();
     {
-      final Session session = HibernateUtil.createSessionFactory("session2/hibernate.cfg.xml").openSession();
-      final Transaction transaction = session.beginTransaction();
-      
-      // previously saved as  new User(123, "goik", "Martin Goik");
-      final User user = (User) session.load(User.class, 1L);
+       // previously saved as  new User(123, "goik", "Martin Goik");
+       final User user = em.find(User.class, 1L);
 
-      System.out.println("a.equals(user)):" + a.equals(user));
-
-      transaction.commit();
-      session.close();
+       System.out.println("a.equals(user)):" + a.equals(user));
     }
+    em.getTransaction().commit();
+
+    em.close();
+    factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session2/LoadUser.java b/ws/eclipse/HibIntro/src/main/java/session2/LoadUser.java
index 2aeec6621..e2d6bbeb9 100644
--- a/ws/eclipse/HibIntro/src/main/java/session2/LoadUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/session2/LoadUser.java
@@ -1,14 +1,10 @@
 package session2;
 
-
-
-import hibintro.util.HibernateUtil;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Repeated retrieval of a single {@link User} object from a database.
  *
  */
@@ -20,29 +16,28 @@ public class LoadUser {
     * @param args unused
     */
    public static void main(String[] args) {
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session2PU");
+      final EntityManager em = factory.createEntityManager();
 
       final User user;
+      
+      em.getTransaction().begin();
       {
-         final Session session = HibernateUtil.createSessionFactory("session2/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         user = (User) session.load(User.class, 1L);
-         final User user1 = (User) session.load(User.class, 1L);
-
+         user = em.find(User.class, 1L);
+         final User user1 = em.find(User.class, 1L);
          System.out.println(" first transaction: user.equals(user1):" + user.equals(user1));
-
-         transaction.commit();
-         session.close();
       }
-      {
-         final Session session = HibernateUtil.createSessionFactory("session2/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         final User user2 = (User) session.load(User.class, 1L);
-
-         boolean val = user.equals(user2);
-         System.out.println("second transaction: user.equals(user2):" + val);
+      em.getTransaction().commit();
 
-         transaction.commit();
-         session.close();
+      em.getTransaction().begin();
+      {
+         final User user2 = em.find(User.class, 1L);
+         System.out.println("second transaction: user.equals(user2):" + user.equals(user2));
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session2/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/session2/PersistSingleUser.java
index 8949901ad..857154abe 100644
--- a/ws/eclipse/HibIntro/src/main/java/session2/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/session2/PersistSingleUser.java
@@ -1,13 +1,10 @@
 package session2;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
  *
  */
@@ -17,13 +14,18 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("session2/hibernate.cfg.xml").openSession();
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session2PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
          final User u = new User(123, "goik", "Martin Goik");
-         session.save(u);
+         em.persist(u);
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session2/hibernate.cfg.xml b/ws/eclipse/HibIntro/src/main/java/session2/hibernate.cfg.xml
deleted file mode 100644
index c733be075..000000000
--- a/ws/eclipse/HibIntro/src/main/java/session2/hibernate.cfg.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE hibernate-configuration PUBLIC
-	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-	"http://www.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">XYZ</property>
-  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hdm</property>
-  <property name="hibernate.connection.username">hdmuser</property>
-  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
-  <property name="hibernate.show_sql">false</property>
-  <property name="hibernate.format_sql">true</property>
-  <property name="hibernate.hbm2ddl.auto">update</property>
-  
-  <mapping class="session2.User"/>
- </session-factory>
-</hibernate-configuration>
diff --git a/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java b/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java
index 284670467..eab15bfa3 100644
--- a/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java
+++ b/ws/eclipse/HibIntro/src/main/java/session3/CompareNewlyCreated.java
@@ -1,12 +1,10 @@
 package session3;
 
-import hibintro.util.HibernateUtil;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Comparing newly created {@link User} instances both with persistent
  * and transient partners.
  *
@@ -21,17 +19,18 @@ public class CompareNewlyCreated {
 
     System.out.println("a.equals(b):" + a.equals(b));
 
-    {
-      final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession();
-      final Transaction transaction = session.beginTransaction();
-      
-      // previously saved as  new User(123, "goik", "Martin Goik");
-      final User user = (User) session.load(User.class, 1L);
-
-      System.out.println("a.equals(user)):" + a.equals(user));
+    final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session3PU");
+    final EntityManager em = factory.createEntityManager();
 
-      transaction.commit();
-      session.close();
+    em.getTransaction().begin();
+    {
+       // previously saved as  new User(123, "goik", "Martin Goik");
+       final User user = em.find(User.class, 1L);
+       System.out.println("a.equals(user)):" + a.equals(user));
     }
+    em.getTransaction().commit();
+
+    em.close();
+    factory.close();
   }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java b/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java
index b2b22c8bf..395eb0bcb 100644
--- a/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/session3/LoadUser.java
@@ -1,14 +1,10 @@
 package session3;
 
-
-
-import hibintro.util.HibernateUtil;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Repeated retrieval of a single {@link User} object from a database.
  *
  */
@@ -20,29 +16,28 @@ public class LoadUser {
     * @param args unused
     */
    public static void main(String[] args) {
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session3PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final User user;
+      User user;
+      em.getTransaction().begin();
       {
-         final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         user = (User) session.load(User.class, 1L);
-         final User user1 = (User) session.load(User.class, 1L);
+         user = em.find(User.class, 1L);
+         final User user1 = em.find(User.class, 1L);
 
          System.out.println(" first transaction: user.equals(user1):" + user.equals(user1));
-
-         transaction.commit();
-         session.close();
       }
-      {
-         final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession();
-         final Transaction transaction = session.beginTransaction();
-         final User user2 = (User) session.load(User.class, 1L);
+      em.getTransaction().commit();
 
-         boolean val = user.equals(user2);
-         System.out.println("second transaction: user.equals(user2):" + val);
-
-         transaction.commit();
-         session.close();
+      em.getTransaction().begin();
+      {
+         final User user2 = em.find(User.class, 1L);
+         System.out.println("second transaction: user.equals(user2):" + user.equals(user2));
       }
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java b/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java
index 92e48c694..b06125ace 100644
--- a/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java
+++ b/ws/eclipse/HibIntro/src/main/java/session3/PersistSingleUser.java
@@ -1,13 +1,10 @@
 package session3;
 
-import hibintro.util.HibernateUtil;
-
-import org.hibernate.Session;
-import org.hibernate.Transaction;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 /**
- * @author goik
- * 
  * Persisting a simple instance of {@link User}
  *
  */
@@ -17,13 +14,17 @@ public class PersistSingleUser {
     * @param args not used.
     */
    public static void main(String[] args) {
-      final Session session = HibernateUtil.createSessionFactory("session3/hibernate.cfg.xml").openSession();
+      
+      final EntityManagerFactory factory = Persistence.createEntityManagerFactory("session3PU");
+      final EntityManager em = factory.createEntityManager();
 
-      final Transaction transaction = session.beginTransaction();
+      em.getTransaction().begin();
       {
-         final User u = new User(123, "goik", "Martin Goik");
-         session.save(u);
+         em.persist(new User(123, "goik", "Martin Goik"));
       }
-      transaction.commit();
+      em.getTransaction().commit();
+
+      em.close();
+      factory.close();
    }
 }
\ No newline at end of file
diff --git a/ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml b/ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml
deleted file mode 100644
index b69f3505a..000000000
--- a/ws/eclipse/HibIntro/src/main/java/session3/hibernate.cfg.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE hibernate-configuration PUBLIC
-	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-	"http://www.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">XYZ</property>
-  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hdm</property>
-  <property name="hibernate.connection.username">hdmuser</property>
-  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
-  <property name="hibernate.show_sql">false</property>
-  <property name="hibernate.format_sql">true</property>
-  <property name="hibernate.hbm2ddl.auto">update</property>
-  
-  <mapping class="session3.User"/>
- </session-factory>
-</hibernate-configuration>
diff --git a/ws/eclipse/HibIntro/src/main/resources/META-INF/persistence.xml b/ws/eclipse/HibIntro/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 000000000..6985b41f8
--- /dev/null
+++ b/ws/eclipse/HibIntro/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,645 @@
+<persistence
+    version="2.1"
+    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
+    xmlns:xi="http://www.w3.org/2001/XInclude"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
+    http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/persistence_2_1.xsd">
+    
+    <!-- 
+         The <code>persistence.xml</code> file configures at least one persistence unit;
+         each unit must have a unique name.
+    -->
+    <persistence-unit name="session1PU">
+        
+        <!-- 
+            A persistent unit has persistent (mapped) classes, you list them here.
+        -->
+        <class>session1.User</class>
+        
+        <!-- 
+            Hibernate can scan your classpath for mapped classes and add them automatically
+            to your persistence unit. This setting disables that feature.
+        -->
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        
+        <!-- 
+            Standard or vendor-specific options can be set as properties on a persistence unit.
+            Any standard properties have the <code>javax.persistence</code> name prefix, Hibernate's
+            settings use <code>hibernate</code>
+        -->
+        <properties>
+            <!-- 
+                JDBC database connection parameter
+            -->
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+
+            <!-- 
+                The JPA engine should drop and re-create the SQL schema in the database
+                automatically when it boots. This is ideal for automated testing, when
+                you want to work with a clean database for every test run.
+            -->
+            <property
+                name="javax.persistence.schema-generation.database.action"
+                value="drop-and-create"/>
+            
+            <!-- 
+                When printing SQL in logs, let Hibernate format the SQL nicely and generate
+                comments into the SQL string so we know why Hibernate executed the SQL statement.
+            -->
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            
+            <!-- Disable Hibernate scanning completely, we also don't want any hbm.xml files
+                 discovered and added automatically. -->
+            <property name="hibernate.archive.autodetection" value="none"/>
+            
+        </properties>
+    </persistence-unit>
+
+    <persistence-unit name="session2PU">
+        <class>session2.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="session3PU">
+        <class>session3.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="componentAddressPU">
+        <class>component.address.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="componentEmailPU">
+        <class>component.email.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="componentEmailsPU">
+        <class>component.emails.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="componentEmailsListPU">
+        <class>component.emails.list.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany1PU">
+        <class>entity.company1.Laptop</class>
+        <class>entity.company1.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany2PU">
+        <class>entity.company2.Laptop</class>
+        <class>entity.company2.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany2NoDropPU">
+        <class>entity.company2.Laptop</class>
+        <class>entity.company2.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany3PU">
+        <class>entity.company3.Laptop</class>
+        <class>entity.company3.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany3NoDropPU">
+        <class>entity.company3.Laptop</class>
+        <class>entity.company3.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany4PU">
+        <class>entity.company4.Laptop</class>
+        <class>entity.company4.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany5PU">
+        <class>entity.company5.model.Laptop</class>
+        <class>entity.company5.model.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany6PU">
+        <class>entity.company6.model.Laptop</class>
+        <class>entity.company6.model.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany6NoDropPU">
+        <class>entity.company6.model.Laptop</class>
+        <class>entity.company6.model.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany7PU">
+        <class>entity.company7.model.Project</class>
+        <class>entity.company7.model.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany7NoDropPU">
+        <class>entity.company7.model.Project</class>
+        <class>entity.company7.model.Employee</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany8PU">
+        <class>entity.company8.model.Project</class>
+        <class>entity.company8.model.Employee</class>
+        <class>entity.company8.model.EmployeeProject</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="entityCompany8NoDropPU">
+        <class>entity.company8.model.Project</class>
+        <class>entity.company8.model.Employee</class>
+        <class>entity.company8.model.EmployeeProject</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV1PU">
+        <class>hibintro.v1.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV2PU">
+        <class>hibintro.v2.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV3PU">
+        <class>hibintro.v3.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV4PU">
+        <class>hibintro.v4.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV5PU">
+        <class>hibintro.v5.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV6PU">
+        <class>hibintro.v6.Project</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV7PU">
+        <class>hibintro.v7.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV8PU">
+        <class>hibintro.v8.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="hibintroV9PU">
+        <class>hibintro.v9.User</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="inheritJoinedV1PU">
+        <class>inherit.joined.v1.BillingDetails</class>
+        <class>inherit.joined.v1.BankAccount</class>
+        <class>inherit.joined.v1.CreditCard</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="inheritJoinedV2PU">
+        <class>inherit.joined.v2.Figure</class>
+        <class>inherit.joined.v2.Rectangle</class>
+        <class>inherit.joined.v2.Circle</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="inheritV1PU">
+        <class>inherit.v1.BillingDetails</class>
+        <class>inherit.v1.BankAccount</class>
+        <class>inherit.v1.CreditCard</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="inheritV2PU">
+        <class>inherit.v2.BillingDetails</class>
+        <class>inherit.v2.BankAccount</class>
+        <class>inherit.v2.CreditCard</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+    <persistence-unit name="inheritV3PU">
+        <class>inherit.v3.Figure</class>
+        <class>inherit.v3.Rectangle</class>
+        <class>inherit.v3.Circle</class>
+        <exclude-unlisted-classes>true</exclude-unlisted-classes>
+        <properties>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
+            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm"/>
+            <property name="javax.persistence.jdbc.user" value="hdmuser"/>
+            <property name="javax.persistence.jdbc.password" value="XYZ"/>
+            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
+            
+            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
+            <property name="hibernate.format_sql" value="true"/>
+            <property name="hibernate.use_sql_comments" value="true"/>
+            <property name="hibernate.archive.autodetection" value="none"/>
+        </properties>
+    </persistence-unit>
+    
+</persistence>
-- 
GitLab