From 9c64807d3af68465473aec442bd0d435c0032c3c Mon Sep 17 00:00:00 2001
From: Kai Moritz <kai@juplo.de>
Date: Fri, 5 Apr 2019 10:42:41 +0200
Subject: [PATCH] Upgraded Hibernate from 5.2.4.Final to 5.2.18.Final

---
 pom.xml                                       |  2 +-
 src/it/update/update.sql                      |  4 +--
 .../plugins/hibernate/AbstractSchemaMojo.java | 33 ++++++++++++++-----
 .../java/de/juplo/test/FileComparator.java    | 10 ++++++
 4 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/pom.xml b/pom.xml
index ec837c19..8a61e22f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -129,7 +129,7 @@
     <!-- Zeichensatz -->
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <!-- Verwendete Versionen -->
-    <hibernate.version>5.2.4.Final</hibernate.version>
+    <hibernate.version>5.2.18.Final</hibernate.version>
     <hibernate-validator.version>5.3.1.Final</hibernate-validator.version>
     <el-api.version>3.0.0</el-api.version>
     <maven.version>3.3.3</maven.version>
diff --git a/src/it/update/update.sql b/src/it/update/update.sql
index 0c9457ca..d739136f 100644
--- a/src/it/update/update.sql
+++ b/src/it/update/update.sql
@@ -1,3 +1,3 @@
 
-    alter table EVENTS 
-        add column MY_NEW_EVENT_DATE_COLUMN timestamp;
+    alter table TEST.PUBLIC.EVENTS 
+       add column MY_NEW_EVENT_DATE_COLUMN timestamp;
diff --git a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
index 41c55ded..72ec9d4d 100644
--- a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
+++ b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
@@ -27,7 +27,6 @@ import java.util.regex.Pattern;
 import javax.persistence.Embeddable;
 import javax.persistence.Entity;
 import javax.persistence.MappedSuperclass;
-import javax.persistence.spi.PersistenceUnitTransactionType;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Resource;
 import org.apache.maven.plugin.AbstractMojo;
@@ -496,7 +495,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
 
       /** Loading and merging configuration from persistence-unit(s) */
       ParsedPersistenceXmlDescriptor unit =
-          loadPersistenceUnit(classLoaderService, properties);
+          loadPersistenceUnit(classLoader, properties);
       if (unit != null)
         properties.putAll(unit.getProperties());
 
@@ -1381,20 +1380,36 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
   }
 
   private ParsedPersistenceXmlDescriptor loadPersistenceUnit(
-      ClassLoaderService classLoaderService,
+      ClassLoader classLoader,
       Properties properties
       )
       throws
         MojoFailureException
   {
-    PersistenceXmlParser parser =
-        new PersistenceXmlParser(
-            classLoaderService,
-            PersistenceUnitTransactionType.RESOURCE_LOCAL
-             );
+    Map<String, ? extends Object> settings =
+        Collections.singletonMap(
+            AvailableSettings.CLASSLOADERS,
+            Collections.singletonList(classLoader)
+            );
+    // Find all available persistent unit descriptors
+    List<ParsedPersistenceXmlDescriptor> descriptors =
+        PersistenceXmlParser.locatePersistenceUnits(settings);
 
+    // Find all persistent units in the located descriptors
     Map<String, ParsedPersistenceXmlDescriptor> units =
-        parser.doResolve(properties);
+        new HashMap<String, ParsedPersistenceXmlDescriptor>();
+    for (ParsedPersistenceXmlDescriptor descriptor : descriptors)
+    {
+      String unit = descriptor.getName();
+      if (units.containsKey(unit))
+        getLog().warn(
+            "Persistence unit " + unit +
+            " from " + descriptor.getPersistenceUnitRootUrl() +
+            " overwrites unit with the same name from " +
+            units.get(unit).getPersistenceUnitRootUrl()
+            );
+      units.put(unit, descriptor);
+    }
 
     if (persistenceUnit == null)
     {
diff --git a/src/test/java/de/juplo/test/FileComparator.java b/src/test/java/de/juplo/test/FileComparator.java
index beb25641..9229fc89 100644
--- a/src/test/java/de/juplo/test/FileComparator.java
+++ b/src/test/java/de/juplo/test/FileComparator.java
@@ -5,6 +5,7 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
+import java.util.regex.Pattern;
 
 
 public class FileComparator
@@ -36,6 +37,15 @@ public class FileComparator
     while ((expected = expectedReader.readLine()) != null)
     {
       found = foundReader.readLine();
+      if (found == null)
+      {
+        System.err.println("Found less content than expected!");
+        System.err.println("First missing line: " + expected);
+        return false;
+      }
+
+      expected = expected.trim();
+      found = found.trim();
       if (!expected.equals(found))
       {
         System.err.println("Mismatch!");
-- 
2.20.1