All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.openjpa.meta.ValueMetaData Maven / Gradle / Ivy

The newest version!
/*
 * 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 org.apache.openjpa.meta;

import java.io.Serializable;

/**
 * Holds metadata on a value; this could be a field value, key value, or
 * element value.
 *
 * @since 0.4.0
 * @author Abe White
 */
public interface ValueMetaData
    extends MetaDataContext, MetaDataModes, Serializable {

    /**
     * The operation is not cascaded to this field.
     */
    int CASCADE_NONE = 0;

    /**
     * The operation is immediately cascaded to this field.
     */
    int CASCADE_IMMEDIATE = 1;

    /**
     * Use automatic cascade behavior. Persistence-by-reachability,
     * delete-dependent, attach-if-detached, etc.
     */
    int CASCADE_AUTO = 2;

    /**
     * Marker to set on {@link #setValueMappedBy} to denote that the map key
     * is mapped by the primary key field of the value.
     */
    String MAPPED_BY_PK = "`pk`";

    /**
     * Return the owning field for this value.
     */
    FieldMetaData getFieldMetaData();

    /**
     * The value class.
     */
    Class getType();

    /**
     * The value class.
     */
    void setType(Class type);

    /**
     * The type code of the value class.
     */
    int getTypeCode();

    /**
     * The type code of the value class.
     */
    void setTypeCode(int code);

    /**
     * Whether the type is a persistence capable instance.
     */
    boolean isTypePC();

    /**
     * The metadata for the value class, if the type is persistent.
     */
    ClassMetaData getTypeMetaData();

    /**
     * Return the declared class of the value. This can differ
     * from the return value of {@link #getType} if the user indicates
     * a different type or the value has an externalizer.
     */
    Class getDeclaredType();

    /**
     * Set the declared class of the value.
     */
    void setDeclaredType(Class type);

    /**
     * Return the declared type code of the value. This can differ
     * from the return value of {@link #getTypeCode} if the user indicates
     * a different type or the value has an externalizer.
     */
    int getDeclaredTypeCode();

    /**
     * Set the type code for the value. The type code is usually
     * computed automatically, but it can be useful to set it explicitly
     * when creating metadatas from scratch.
     */
    void setDeclaredTypeCode(int type);

    /**
     * Whether the type is a persistence capable instance.
     */
    boolean isDeclaredTypePC();

    /**
     * Return metadata for the value's class, if the type is persistent.
     */
    ClassMetaData getDeclaredTypeMetaData();

    /**
     * This attribute is a hint to the implementation to store this value
     * in the same structure as the class, rather than as a separate datastore
     * structure. Defaults to true if the field is not a collection or map
     * or persistence-capable object; defaults to false otherwise.
     * Implementations are permitted to ignore this attribute.
     */
    boolean isEmbedded();

    /**
     * This attribute is a hint to the implementation to store this value
     * in the same structure as the class, rather than as a separate datastore
     * structure. Defaults to true if the field is not a collection or map
     * or persistence-capable objects; defaults to false otherwise.
     * Implementations are permitted to ignore this attribute.
     */
    void setEmbedded(boolean embedded);

    /**
     * Whether this is an embedded persistence capable value.
     */
    boolean isEmbeddedPC();

    /**
     * The embedded class metadata for the value.
     */
    ClassMetaData getEmbeddedMetaData();

    /**
     * Add embedded metadata for this value.
     */
    ClassMetaData addEmbeddedMetaData();

    /**
     * Add embedded metadata for this value with the given access type
     */
    ClassMetaData addEmbeddedMetaData(int access);

    /**
     * Cascade behavior for delete operation. Only applies to
     * persistence-capable values. Options are:
*
    *
  • CASCADE_NONE: No cascades.
  • *
  • CASCADE_IMMEDIATE: Value is deleted immediately when * the owning object is deleted.
  • *
  • CASCADE_AUTO: Value will be deleted on flush * if the owning object is deleted or if the value is removed from the * owning object, and if the value is not assigned to another relation in * the same transaction.
  • *
*/ int getCascadeDelete(); /** * Cascade behavior for deletion. * * @see #getCascadeDelete */ void setCascadeDelete(int cascade); /** * Cascade behavior for persist operation. Only applies to * persistence-capable values. Options are:
*
    *
  • CASCADE_NONE: No cascades. If a transient relation * is held at flush, an error is thrown.
  • *
  • CASCADE_IMMEDIATE: Value is persisted immediately when * the owning object is persisted.
  • *
  • CASCADE_AUTO: Value will be persisted on flush.
  • *
*/ int getCascadePersist(); /** * Cascade behavior for persist operation. * * @see #getCascadePersist */ void setCascadePersist(int cascade); /** * Cascade behavior for persist operation. * * @see #getCascadePersist */ void setCascadePersist(int cascade, boolean checkPUDefault); /** * Cascade behavior for attach operation. Only applies to * persistence-capable values. Options are:
*
    *
  • CASCADE_NONE: No cascades of attach. Relation * remains detached.
  • *
  • CASCADE_IMMEDIATE: Value is attached immediately.
  • *
*/ int getCascadeAttach(); /** * Cascade behavior for attach operation. * * @see #getCascadeAttach */ void setCascadeAttach(int cascade); /** * Cascade behavior for detach operation. Only applies to * persistence-capable values. Options are:
*
    *
  • CASCADE_NONE: No cascades of detach. Relation * remains attached.
  • *
  • CASCADE_IMMEDIATE: Value is detached immediately.
  • *
*/ int getCascadeDetach(); /** * Cascade behavior for detach operation. * * @see #getCascadeDetach */ void setCascadeDetach(int cascade); /** * Cascade behavior for refresh operation. Only applies to * persistence-capable values. Options are:
*
    *
  • CASCADE_NONE: No cascades of refresh.
  • *
  • CASCADE_IMMEDIATE: Persistent value object is also * refreshed.
  • *
  • CASCADE_AUTO: Value will be refreshed if it is * in the current fetch groups.
  • *
*/ int getCascadeRefresh(); /** * Cascade behavior for refresh operation. * * @see #getCascadeRefresh */ void setCascadeRefresh(int cascade); /** * Whether this value is serialized when stored. */ boolean isSerialized(); /** * Whether this value is serialized when stored. */ void setSerialized(boolean serialized); /** * The field that this value shares a mapping with. Currently the only * supported use for a mapped-by value is when a map field key is * determined by a field of the persistence-capable map value. */ String getValueMappedBy(); /** * The field that this value shares a mapping with. Currently the only * supported use for a mapped-by value is when a map field key is * determined by a field of the persistence-capable map value. */ void setValueMappedBy(String mapped); /** * The field that this value shares a mapping with. Currently the only * supported use for a mapped-by value is when a map field key is * determined by a field of the persistence-capable map value. */ FieldMetaData getValueMappedByMetaData(); /** * User-supplied type overriding assumed type based on field. */ Class getTypeOverride(); /** * User-supplied type overriding assumed type based on field. */ void setTypeOverride(Class type); /** * Resolve mode for metadata. */ int getResolve(); /** * Resolve mode for metadata. */ void setResolve(int mode); /** * Resolve mode for metadata. */ void setResolve(int mode, boolean on); /** * Resolve and validate metadata. Return true if already resolved. */ boolean resolve(int mode); /** * Copy state from the given value to this one. Do not copy mapping * information. */ void copy(ValueMetaData vmd); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy