You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2015/09/17 00:12:46 UTC
deltaspike git commit: DELTASPIKE-987 support for @Version
Repository: deltaspike
Updated Branches:
refs/heads/master 08dd95a31 -> 67d5ef8bb
DELTASPIKE-987 support for @Version
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/67d5ef8b
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/67d5ef8b
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/67d5ef8b
Branch: refs/heads/master
Commit: 67d5ef8bbf68c29e1c9dd3e99f15b89e458ed59d
Parents: 08dd95a
Author: gpetracek <gp...@apache.org>
Authored: Thu Sep 17 00:06:04 2015 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Thu Sep 17 00:06:04 2015 +0200
----------------------------------------------------------------------
.../impl/handler/CdiQueryInvocationContext.java | 8 ++++++
.../data/impl/meta/unit/EntityDescriptor.java | 5 ++--
.../impl/meta/unit/EntityDescriptorReader.java | 20 +++++++++------
.../meta/unit/MappedSuperclassDescriptor.java | 5 ++--
.../data/impl/meta/unit/PersistenceUnits.java | 10 ++++++++
.../meta/unit/PersistentClassDescriptor.java | 10 +++++++-
.../deltaspike/data/impl/util/EntityUtils.java | 27 ++++++++++++++++++++
.../unit/DescriptorHierarchyBuilderTest.java | 12 ++++-----
8 files changed, 78 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/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 0ca1cf2..2a19a40 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,6 +22,7 @@ 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.property.Property;
import org.apache.deltaspike.data.impl.util.EntityUtils;
import org.apache.deltaspike.data.impl.util.bean.Destroyable;
import org.apache.deltaspike.data.spi.QueryInvocationContext;
@@ -30,6 +31,7 @@ import javax.persistence.EntityManager;
import javax.persistence.LockModeType;
import javax.persistence.Query;
import javax.persistence.QueryHint;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
@@ -92,6 +94,12 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
{
try
{
+ Property<Serializable> versionProperty = EntityUtils.getVersionProperty(entity);
+ if (versionProperty != null)
+ {
+ return versionProperty.getValue(entity) == null;
+ }
+
if (EntityUtils.primaryKeyValue(entity) == null)
{
return true;
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
index 662e687..9d8a78c 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptor.java
@@ -27,9 +27,10 @@ class EntityDescriptor extends PersistentClassDescriptor
protected final String tableName;
- EntityDescriptor(String name, String packageName, String className, String idClass, String id, String tableName)
+ EntityDescriptor(String name, String packageName, String className, String idClass, String id,
+ String version, String tableName)
{
- super(name, packageName, className, idClass, id);
+ super(name, packageName, className, idClass, id, version);
this.tableName = tableName;
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
index 170f7ea..6b60a20 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/EntityDescriptorReader.java
@@ -56,9 +56,9 @@ public class EntityDescriptorReader extends DescriptorReader
{
@Override
protected EntityDescriptor instance(String name, String packageName, String className,
- String idClass, String id, String tableName)
+ String idClass, String id, String version, String tableName)
{
- return new EntityDescriptor(name, packageName, className, idClass, id, tableName);
+ return new EntityDescriptor(name, packageName, className, idClass, id, version, tableName);
}
@Override
@@ -72,9 +72,9 @@ public class EntityDescriptorReader extends DescriptorReader
{
@Override
protected MappedSuperclassDescriptor instance(String name, String packageName, String className,
- String idClass, String id)
+ String idClass, String id, String version)
{
- return new MappedSuperclassDescriptor(name, packageName, className, idClass, id);
+ return new MappedSuperclassDescriptor(name, packageName, className, idClass, id, version);
}
@Override
@@ -148,6 +148,7 @@ public class EntityDescriptorReader extends DescriptorReader
protected String className;
protected String idClass;
protected String id;
+ protected String version;
protected String embeddedId;
public List<T> build(Document doc)
@@ -161,6 +162,7 @@ public class EntityDescriptorReader extends DescriptorReader
this.className = extractAttribute(mappings.item(i), "class");
this.idClass = extractNodeAttribute((Element) mappings.item(i), "id-class", "class");
this.id = extractNodeAttribute((Element) mappings.item(i), "id", "name");
+ this.version = extractNodeAttribute((Element) mappings.item(i), "version", "name");
this.embeddedId = extractNodeAttribute((Element) mappings.item(i), "embedded-id", "name");
addFields((Element) mappings.item(i));
addInResult();
@@ -177,14 +179,15 @@ public class EntityDescriptorReader extends DescriptorReader
private abstract class MappedSuperClassBuilder<T extends PersistentClassDescriptor> extends PersistenceBuilder
{
- protected abstract T instance(String name, String packageName, String className, String idClass, String id);
+ protected abstract T instance(String name, String packageName, String className, String idClass, String id,
+ String version);
protected abstract String tagName();
@Override
protected void addInResult()
{
- result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId));
+ result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId, version));
}
@Override
@@ -200,14 +203,15 @@ public class EntityDescriptorReader extends DescriptorReader
protected String tableName;
protected abstract T instance(String name, String packageName, String className, String idClass, String id,
- String tableName);
+ String version, String tableName);
protected abstract String tagName();
@Override
protected void addInResult()
{
- result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId, tableName));
+ result.add(instance(name, packageName, className, idClass, id != null ? id : embeddedId,
+ version, tableName));
}
@Override
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
index 6a6fcfa..6c5ffe9 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/MappedSuperclassDescriptor.java
@@ -25,9 +25,10 @@ import java.io.Serializable;
class MappedSuperclassDescriptor extends PersistentClassDescriptor
{
- MappedSuperclassDescriptor(String name, String packageName, String className, String idClass, String id)
+ MappedSuperclassDescriptor(String name, String packageName, String className, String idClass, String id,
+ String version)
{
- super(name, packageName, className, idClass, id);
+ super(name, packageName, className, idClass, id, version);
}
@Override
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
index 384dfb3..a3a2d75 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistenceUnits.java
@@ -60,6 +60,16 @@ public final class PersistenceUnits
return null;
}
+ public String versionField(Class<?> entityClass)
+ {
+ EntityDescriptor entity = find(entityClass);
+ if (entity != null)
+ {
+ return entity.getVersion();
+ }
+ return null;
+ }
+
public Class<?> primaryKeyIdClass(Class<?> entityClass)
{
EntityDescriptor entity = find(entityClass);
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
index a0ba3fa..6c45b4f 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/unit/PersistentClassDescriptor.java
@@ -31,15 +31,18 @@ abstract class PersistentClassDescriptor
protected final Class<?> entityClass;
protected final Class<? extends Serializable> idClass;
protected final String id;
+ protected final String version;
private PersistentClassDescriptor parent;
- PersistentClassDescriptor(String name, String packageName, String className, String idClass, String id)
+ PersistentClassDescriptor(String name, String packageName, String className, String idClass, String id,
+ String version)
{
Class<?> clazz = entityClass(className, packageName);
this.name = name;
this.entityClass = clazz;
this.idClass = idClass(clazz, idClass, packageName, id);
this.id = id;
+ this.version = version;
}
public Class<? extends Serializable> getIdClass()
@@ -52,6 +55,11 @@ abstract class PersistentClassDescriptor
return id;
}
+ public String getVersion()
+ {
+ return version;
+ }
+
public String getName()
{
return name;
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/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 0075ea5..b3e1ac5 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
@@ -26,6 +26,7 @@ import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
+import javax.persistence.Version;
import org.apache.deltaspike.data.impl.meta.unit.PersistenceUnits;
import org.apache.deltaspike.data.impl.meta.verifier.EntityVerifier;
@@ -111,4 +112,30 @@ public final class EntityUtils
}
return criteria;
}
+
+ public static Property<Serializable> getVersionProperty(Object entity)
+ {
+ Class<?> entityClass = entity.getClass();
+ List<PropertyCriteria> criteriaList = new LinkedList<PropertyCriteria>();
+ criteriaList.add(new AnnotatedPropertyCriteria(Version.class));
+
+ String fromMappingFiles = PersistenceUnits.instance().versionField(entityClass);
+ if (fromMappingFiles != null)
+ {
+ criteriaList.add(new NamedPropertyCriteria(fromMappingFiles));
+ }
+
+ for (PropertyCriteria criteria : criteriaList)
+ {
+ PropertyQuery<Serializable> query =
+ PropertyQueries.<Serializable> createQuery(entityClass).addCriteria(criteria);
+ Property<Serializable> result = query.getFirstResult();
+ if (result != null)
+ {
+ return result;
+ }
+ }
+
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/67d5ef8b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
index df0ed15..4cf9a43 100644
--- a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
+++ b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/meta/unit/DescriptorHierarchyBuilderTest.java
@@ -39,13 +39,13 @@ public class DescriptorHierarchyBuilderTest
@Before
public void before()
{
- entities.add(new EntityDescriptor("test", null, EntityLevel3.class.getName(), null, null, null));
- entities.add(new EntityDescriptor("test", null, EntityLevel5.class.getName(), null, null, null));
+ entities.add(new EntityDescriptor("test", null, EntityLevel3.class.getName(), null, null, null, null));
+ entities.add(new EntityDescriptor("test", null, EntityLevel5.class.getName(), null, null, null, null));
- superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel1.class.getName(), null, "id"));
- superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel4.class.getName(), null, null));
- superClasses.add(new MappedSuperclassDescriptor("test", null, MappedUnrelated.class.getName(), null, null));
- superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel2.class.getName(), null, null));
+ superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel1.class.getName(), null, "id", null));
+ superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel4.class.getName(), null, null, null));
+ superClasses.add(new MappedSuperclassDescriptor("test", null, MappedUnrelated.class.getName(), null, null, null));
+ superClasses.add(new MappedSuperclassDescriptor("test", null, MappedLevel2.class.getName(), null, null, null));
}
@Test