javax.jdo.annotations.Persistent Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javax.jdo Show documentation
Show all versions of javax.jdo Show documentation
The Java Data Objects API (JDO) : a standard interface-based Java model abstraction of persistence, developed by the JCP.
/*
* 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.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 {};
}