diff --git a/src/main/java/org/springframework/data/annotation/ReadOnlyProperty.java b/src/main/java/org/springframework/data/annotation/ReadOnlyProperty.java new file mode 100644 index 000000000..8d971c1bf --- /dev/null +++ b/src/main/java/org/springframework/data/annotation/ReadOnlyProperty.java @@ -0,0 +1,33 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.annotation; + +import static java.lang.annotation.ElementType.*; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marks a field to be {@literal read-only} for the mapping framework and therefore will not be persisted. + * + * @author Christoph Strobl + * @since 1.9 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { FIELD, METHOD, ANNOTATION_TYPE }) +public @interface ReadOnlyProperty { +} diff --git a/src/main/java/org/springframework/data/mapping/PersistentProperty.java b/src/main/java/org/springframework/data/mapping/PersistentProperty.java index 164b82ac2..b1363b98e 100644 --- a/src/main/java/org/springframework/data/mapping/PersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/PersistentProperty.java @@ -147,8 +147,21 @@ public interface PersistentProperty
> { */ boolean isTransient(); + /** + * @return + * @deprecated use {@link #isWritable()} instead, will be removed in 1.9 RC1. + */ + @Deprecated boolean shallBePersisted(); + /** + * Returns whether the current property is writable, i.e. if the value held for it shall be written to the data store. + * + * @return + * @since 1.9 + */ + boolean isWritable(); + /** * Returns whether the property is an {@link Association}. * diff --git a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java index 09204345b..e2d32dc47 100644 --- a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java @@ -36,6 +36,7 @@ import org.springframework.util.ReflectionUtils; * * @author Jon Brisbin * @author Oliver Gierke + * @author Christoph Strobl */ public abstract class AbstractPersistentProperty
> implements PersistentProperty
{ @@ -203,7 +204,17 @@ public abstract class AbstractPersistentProperty
* (non-Javadoc) * @see org.springframework.data.mapping.PersistentProperty#shallBePersisted() */ + @Override public boolean shallBePersisted() { + return isWritable(); + } + + /* + * (non-Javadoc) + * @see org.springframework.data.mapping.PersistentProperty#isWritable() + */ + @Override + public boolean isWritable() { return !isTransient(); } @@ -215,6 +226,10 @@ public abstract class AbstractPersistentProperty
return field == null ? false : AnnotationUtils.getAnnotation(field, Reference.class) != null; } + /* + * (non-Javadoc) + * @see org.springframework.data.mapping.PersistentProperty#getAssociation() + */ public Association
getAssociation() { return association; } diff --git a/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java b/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java index 871344c93..650c5196f 100644 --- a/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AnnotationBasedPersistentProperty.java @@ -29,6 +29,7 @@ import org.springframework.core.annotation.AnnotationUtils; import org.springframework.data.annotation.AccessType; import org.springframework.data.annotation.AccessType.Type; import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.ReadOnlyProperty; import org.springframework.data.annotation.Reference; import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Version; @@ -41,6 +42,7 @@ import org.springframework.util.Assert; * Special {@link PersistentProperty} that takes annotations at a property into account. * * @author Oliver Gierke + * @author Christoph Strobl */ public abstract class AnnotationBasedPersistentProperty
> extends AbstractPersistentProperty
{ @@ -169,6 +171,15 @@ public abstract class AnnotationBasedPersistentProperty
> { @@ -158,6 +161,38 @@ public class AnnotationBasedPersistentPropertyUnitTests
, Annotation> getAnnotationCache(SamplePersistentProperty property) {
return (Map