From 1b4edb35b0341975ce373a0dcbc2d466d1f4c804 Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Wed, 6 Apr 2011 11:39:51 -0400 Subject: [PATCH] DATADOC-48 added new @RelatedDocument annotation --- .../document/annotation/RelatedDocument.java | 35 +++++++++++++++++++ .../document/mongo/MongoDocumentBacking.aj | 8 ++--- .../document/persistence/test/Person.java | 4 +-- .../document/mongodb/mapping/Document.java | 3 +- 4 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 spring-data-document-core/src/main/java/org/springframework/data/document/annotation/RelatedDocument.java diff --git a/spring-data-document-core/src/main/java/org/springframework/data/document/annotation/RelatedDocument.java b/spring-data-document-core/src/main/java/org/springframework/data/document/annotation/RelatedDocument.java new file mode 100644 index 000000000..397a75c5e --- /dev/null +++ b/spring-data-document-core/src/main/java/org/springframework/data/document/annotation/RelatedDocument.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2011 by the original author(s). + * + * 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.document.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Thomas Risberg + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ + ElementType.FIELD +}) +public @interface RelatedDocument { + + String collection() default ""; + +} diff --git a/spring-data-mongodb-cross-store/src/main/java/org/springframework/data/persistence/document/mongo/MongoDocumentBacking.aj b/spring-data-mongodb-cross-store/src/main/java/org/springframework/data/persistence/document/mongo/MongoDocumentBacking.aj index c281a89ad..d14db1b50 100644 --- a/spring-data-mongodb-cross-store/src/main/java/org/springframework/data/persistence/document/mongo/MongoDocumentBacking.aj +++ b/spring-data-mongodb-cross-store/src/main/java/org/springframework/data/persistence/document/mongo/MongoDocumentBacking.aj @@ -13,7 +13,7 @@ import org.aspectj.lang.JoinPoint; import org.aspectj.lang.reflect.FieldSignature; import org.springframework.dao.DataAccessException; -import org.springframework.data.document.mongodb.mapping.Document; +import org.springframework.data.document.annotation.RelatedDocument; import org.springframework.data.persistence.document.DocumentBacked; import org.springframework.data.persistence.document.DocumentBackedTransactionSynchronization; @@ -47,7 +47,7 @@ public aspect MongoDocumentBacking { declare parents : (@Entity *) implements DocumentBacked; // The annotated fields that will be persisted in MongoDB rather than with JPA - declare @field: @Document * (@Entity+ *).*:@Transient; + declare @field: @RelatedDocument * (@Entity+ *).*:@Transient; // ------------------------------------------------------------------------- // Advise user-defined constructors of ChangeSetBacked objects to create a new @@ -65,12 +65,12 @@ public aspect MongoDocumentBacking { args(cs); protected pointcut entityFieldGet(DocumentBacked entity) : - get(@Document * DocumentBacked+.*) && + get(@RelatedDocument * DocumentBacked+.*) && this(entity) && !get(* DocumentBacked.*); protected pointcut entityFieldSet(DocumentBacked entity, Object newVal) : - set(@Document * DocumentBacked+.*) && + set(@RelatedDocument * DocumentBacked+.*) && this(entity) && args(newVal) && !set(* DocumentBacked.*); diff --git a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/test/Person.java b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/test/Person.java index 3f84fdbd1..1886e8232 100644 --- a/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/test/Person.java +++ b/spring-data-mongodb-cross-store/src/test/java/org/springframework/data/document/persistence/test/Person.java @@ -3,7 +3,7 @@ package org.springframework.data.document.persistence.test; import javax.persistence.Entity; import javax.persistence.Id; -import org.springframework.data.document.mongodb.mapping.Document; +import org.springframework.data.document.annotation.RelatedDocument; @Entity public class Person { @@ -17,7 +17,7 @@ public class Person { private java.util.Date birthDate; - @Document + @RelatedDocument public Resume resume; public Person() { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/Document.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/Document.java index 1cf6b5286..f46a54687 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/Document.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/Document.java @@ -29,8 +29,7 @@ import org.springframework.data.annotation.Persistent; @Persistent @Retention(RetentionPolicy.RUNTIME) @Target({ - ElementType.TYPE, - ElementType.FIELD + ElementType.TYPE }) public @interface Document {