blob: 70b975b2d3971efefa9d4c87fddcea4e77834e01 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 javax.jdo.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.jdo.AttributeConverter;
import javax.jdo.AttributeConverter.UseDefault;
/**
* Annotation for defining the persistence of a member.
* This corresponds to the xml elements "field" and "property".
*
* @version 2.1
* @since 2.1
*/
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Persistent
{
/** Modifier for this field. This is normally not specified, and the
* defaults are used, or the @Transactional or @NotPersistent
* annotation is specified directly on the member. One possible use
* for specifying persistenceModifier is for embedded instances in which
* a member is not persistent but in the non-embedded instances the
* member is persistent. Note that it is not portable to specify a
* member to be not persistent in the non-embedded case and persistent
* in the embedded usage.
* @return the persistence modifier
*/
PersistenceModifier persistenceModifier()
default PersistenceModifier.UNSPECIFIED;
/** Table to use for persisting this member.
* @return the table to use for persisting this member
*/
String table() default "";
/** Whether this member is in the default fetch group.
* @return whether this member is in the default fetch group
*/
String defaultFetchGroup() default "";
/** Behavior when this member contains a null value.
* @return the behavior when this member contains a null value
*/
NullValue nullValue() default NullValue.NONE;
/** Whether this member is embedded.
* @return whether this member is embedded
*/
String embedded() default "";
/** Whether the elements of this member are embedded.
* @return whether the elements of this member are embedded
*/
String embeddedElement() default "";
/** Whether the keys of this member are embedded.
* @return whether the keys of this member are embedded
*/
String embeddedKey() default "";
/** Whether the values of this member are embedded.
* @return whether the values of this member are embedded
*/
String embeddedValue() default "";
/** Whether this member is serialized into a single column.
* @return whether this member is serialized into a single column
*/
String serialized() default "";
/** Whether the elements of this member are serialized.
* @return whether the elements of this member are serialized
*/
String serializedElement() default "";
/** Whether the keys of this member are serialized.
* @return whether the keys of this member are serialized
*/
String serializedKey() default "";
/** Whether the values of this member are serialized.
* @return whether the values of this member are serialized
*/
String serializedValue() default "";
/** Whether related object(s) of this member are dependent
* and so deleted when this object is deleted.
* @return whether the related object(s) of this member
* are dependent
*/
String dependent() default "";
/** Whether the elements of this member are dependent.
* @return whether the elements of this member are dependent
*/
String dependentElement() default "";
/** Whether the keys of this member are dependent.
* @return whether the keys of this member are dependent
*/
String dependentKey() default "";
/** Whether the values of this member are dependent.
* @return whether the values of this member are dependent
*/
String dependentValue() default "";
/** Whether this member is part of the primary key for application
* identity. This is equivalent to specifying @PrimaryKey as
* a separate annotation on the member.
* @return whether this member is part of the primary key
*/
String primaryKey() default "";
/** Value strategy to use to generate the value for this field
* or property (if any).
* @return the generated value strategy
*/
IdGeneratorStrategy valueStrategy() default IdGeneratorStrategy.UNSPECIFIED;
/** Custom value strategy to use to generate the value for this field
* or property (if any). If customValueStrategy is non-empty, then
* valueStrategy must be UNSPECIFIED.
* @return the custom value strategy
*/
String customValueStrategy() default "";
/** Name of the sequence to use with particular value strategies.
* @return the name of the sequence
*/
String sequence() default "";
/** Name of the fetch-group to use when this member is loaded
* due to being referenced when not already loaded.
* @return the name of the load fetch group
*/
String loadFetchGroup() default "";
/** Types of the member. Used when the declared
* member type is a supertype of the actual type that is stored in the
* member. For example, the declared member type might be an interface type
* that must contain an object of a concrete type when used
* for persistence.
* @return the types
*/
Class[] types() default {};
/** Name of the related member in the other class
* where this value is mapped (bidirectional relationship).
* @return the related member in the other class
*/
String mappedBy() default "";
/** Column definition(s) for this member. Used for mapping
* multiple columns
* to the same member, for example relationships with
* multiple column foreign keys.
* @return the columns for this member
*/
Column[] columns() default {};
/** Column name where the values are stored for this member.
* @return the name of the column
*/
String column() default "";
/** Null indicator column for this member. Used for nested
* embedded fields or properties to indicate whether the embedded
* instance should have a null value.
* @return the null indicator column
*/
String nullIndicatorColumn() default "";
/** Name of the member when this is embedded in another object.
* The fully-qualified member name is used. For example,
* "line.point1.x" refers to the member x in class Point
* that is embedded as member point1 in class Line that is embedded
* in a member called line.
* @return the name of the member
*/
String name() default "";
/**
* Recursion depth for this member. Used only when
* the annotation is used within the definition of a FetchGroup.
* @return the recursion depth
*/
int recursionDepth() default 1;
/**
* Whether this field/property is cacheable in a Level2 cache.
* @return Whether the field is L2 cacheable
* @since 2.2
*/
String cacheable() default "true";
/**
* Optional {@link AttributeConverter} to use for converting this member.
* @return Converter class for converting this member when not PersistenceCapable
* (or NullAttributeConverter when not specified).
*/
@SuppressWarnings("rawtypes")
Class<? extends AttributeConverter> converter() default UseDefault.class; // TODO Current JDK doesn't allow "default null"
/**
* Whether we should disable any converter that was specified as default for this type on the PMF.
* Only has any effect when this is explicitly set to true, when any AttributeConverter specified for this type
* either here or for the class or at the PMF will be ignored and will use the JDO implementation default handling.
* @return Whether PMF attribute conversion is to be disabled.
*/
boolean useDefaultConversion() default false; // TODO Current JDK doesn't allow "default null"
/** Vendor extensions for this member.
* @return the vendor extensions
*/
Extension[] extensions() default {};
}