From 1eaeaa0e9d416c56b142e481209fa63a084c7ae9 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 13 Aug 2015 09:38:32 +0200 Subject: [PATCH] DATAJPA-775 - Improvements to Spring Data @Version detection. Moved the detection of an invalidly used @Version to the verification phase of the JpaPersistentEntity so that the MappingContext doesn't even bootstrap if a misconfiguration is detected. The previous approach would've detected the invalid stage at access time which might actually occur too late. Original pull request: #153. --- .../jpa/mapping/JpaPersistentEntityImpl.java | 30 +++++++++++- .../mapping/JpaPersistentPropertyImpl.java | 15 ++---- .../JpaMetamodelMappingContextUnitTests.java | 49 +++++++++++++++++++ .../JpaPersistentPropertyImplUnitTests.java | 9 ---- 4 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 src/test/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContextUnitTests.java diff --git a/src/main/java/org/springframework/data/jpa/mapping/JpaPersistentEntityImpl.java b/src/main/java/org/springframework/data/jpa/mapping/JpaPersistentEntityImpl.java index 7f2b2489f..65dd245fc 100644 --- a/src/main/java/org/springframework/data/jpa/mapping/JpaPersistentEntityImpl.java +++ b/src/main/java/org/springframework/data/jpa/mapping/JpaPersistentEntityImpl.java @@ -19,6 +19,7 @@ import java.util.Comparator; import javax.persistence.metamodel.Metamodel; +import org.springframework.data.annotation.Version; import org.springframework.data.jpa.provider.PersistenceProvider; import org.springframework.data.jpa.provider.ProxyIdAccessor; import org.springframework.data.mapping.IdentifierAccessor; @@ -31,10 +32,15 @@ import org.springframework.util.Assert; * Implementation of {@link JpaPersistentEntity}. * * @author Oliver Gierke + * @author Greg Turnquist * @since 1.3 */ -class JpaPersistentEntityImpl extends BasicPersistentEntity implements - JpaPersistentEntity { +class JpaPersistentEntityImpl extends BasicPersistentEntity + implements JpaPersistentEntity { + + private static final String INVALID_VERSION_ANNOTATION = "%s is annotated with " + + org.springframework.data.annotation.Version.class.getName() + " but needs to use " + + javax.persistence.Version.class.getName() + " to trigger optimistic locking correctly!"; private final ProxyIdAccessor proxyIdAccessor; @@ -70,6 +76,26 @@ class JpaPersistentEntityImpl extends BasicPersistentEntity