The goal of this issue is to allow specific domain entity to each NoSQL type. To solve this problem, I saw two options:
1 Allow the @Entity
be extensible
Allows the @Entity
be used in the other Annotation. Once this annotation applies the Entity, it has the same property of this Entity annotation.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Stereotype
@Entity
public @interface CustomAnnotation {
/**
* The name of an entity. Defaults to the unqualified name of the entity class.
* @return the entity name (Optional)
*/
String value() default "";
}
@CustomAnnotation
public class Person {
//fields
}
So, will be an alias to:
@Entity
public class Person {
//fields
}
Conditions:
- When there are two annotations that will use the Entity one.
- Where there are two custom annotations then can use anyone.
- When the custom annotation doesn't have a
String value() default "";
it will use the Class.getSimpleName() - Where there is the method, that must use the same rule of the Entity
Adds four custom annotations kinds
- ColumnFamily in the column API
- DocumentCollection in the document API
- Bucket in the key-value API
- Vertex in the graph API
2 Add new annotations
Just add new annotations:
- ColumnFamily in the column API
- DocumentCollection in the document API
- Bucket in the key-value API
- Vertex in the graph API
3 keep what we have
The DDD fundamentals say:
An entity is an object fundamentally defined not by its attributes, but by a thread of continuity and identity.
Thereby, the concept is technology agnostic
--
Otávio Gonçalves de Santana