You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by da...@apache.org on 2015/07/09 01:28:17 UTC

deltaspike git commit: DELTASPIKE-948 CdiQueryInvocationContext#isNew isn't portable across jpa providers

Repository: deltaspike
Updated Branches:
  refs/heads/master 32e09a540 -> 549ee2500


DELTASPIKE-948 CdiQueryInvocationContext#isNew isn't portable across jpa providers


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/549ee250
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/549ee250
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/549ee250

Branch: refs/heads/master
Commit: 549ee2500d9d096e30bddb9957eac9b007f15cad
Parents: 32e09a5
Author: Daniel Cunha (soro) <da...@apache.org>
Authored: Wed Jul 8 20:27:31 2015 -0300
Committer: Daniel Cunha (soro) <da...@apache.org>
Committed: Wed Jul 8 20:27:31 2015 -0300

----------------------------------------------------------------------
 .../impl/handler/CdiQueryInvocationContext.java | 30 ++++++++++++++++++--
 .../deltaspike/data/impl/util/EntityUtils.java  |  2 +-
 2 files changed, 29 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/549ee250/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
index 45c3449..b0b4c67 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
@@ -22,8 +22,8 @@ import org.apache.deltaspike.data.api.SingleResultType;
 import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
 import org.apache.deltaspike.data.impl.meta.RepositoryMethod;
 import org.apache.deltaspike.data.impl.param.Parameters;
+import org.apache.deltaspike.data.impl.util.EntityUtils;
 import org.apache.deltaspike.data.impl.util.bean.Destroyable;
-import org.apache.deltaspike.data.impl.util.jpa.PersistenceUnitUtilDelegateFactory;
 import org.apache.deltaspike.data.spi.QueryInvocationContext;
 
 import javax.persistence.EntityManager;
@@ -92,7 +92,16 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
     {
         try
         {
-            return PersistenceUnitUtilDelegateFactory.get(entityManager).getIdentifier(entity) == null;
+            if (EntityUtils.primaryKeyValue(entity) == null)
+            {
+                return true;
+            }
+
+            if (!entityManager.contains(entity) && countCheck(entity))
+            {
+                return true;
+            }
+            return false;
         }
         catch (IllegalArgumentException e)
         {
@@ -293,4 +302,21 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
         return extractQueryHints(method) != null;
     }
 
+    private boolean countCheck(Object entity)
+    {
+        StringBuilder sql = new StringBuilder("SELECT COUNT(e) FROM " + getEntityClass()
+                .getSimpleName() + " e ");
+        sql.append("WHERE e.");
+        sql.append(EntityUtils.primaryKey(getEntityClass()).getName());
+        sql.append(" = " + EntityUtils.primaryKeyValue(entity));
+
+        final Query query = entityManager.createQuery(sql.toString());
+        final Long result = (Long) query.getSingleResult();
+        if (Long.valueOf(0).equals(result))
+        {
+            return true;
+        }
+        return false;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/549ee250/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
index 5f5c966..0075ea5 100755
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/util/EntityUtils.java
@@ -85,7 +85,7 @@ public final class EntityUtils
         return new EntityVerifier().verify(entityClass);
     }
 
-    private static Property<Serializable> primaryKey(Class<?> entityClass)
+    public static Property<Serializable> primaryKey(Class<?> entityClass)
     {
         for (PropertyCriteria c : criteriaList(entityClass))
         {