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))
{