blob: 67cd706221ba50aef3be219b388e9920e5330597 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* 06/10/2009 Andrei Ilitchev
* - JPA 2.0 - OrderedList support.
******************************************************************************/
package org.eclipse.persistence.annotations;
/**
* The OrderCorrectionType enum is used with OrderCorrection annotation
* that could be applied together with OrderColumn annotation.
* OrderCorrectionType defines a strategy taken in case the order list read from the data base is invalid
* (has nulls, duplicates, negative values, values greater/equal to list size -
* the only valid order list of n elements is: {0, 1,..., n-1}).
*
* OrderCorrectionType also could be set directly into CollectionMapping
* using setListOrderCorrectionType method.
*
* @see org.eclipse.persistence.annotations.OrderCorrection
* @see org.eclipse.persistence.mappings.CollectionMapping
*/
public enum OrderCorrectionType {
/**
* Order of the list read into application is corrected, but no knowledge
* is kept about the invalid list order left in the data base.
* This is no problem in case of a read-only usage of the list,
* but in case the list is modified and saved back into the data base
* the order likely will not be the same as in cache and will be invalid.
* This mode is used by default in case the mapped attribute
* is neither List nor Vector
* (more precisely: is not assignable from Eclipselink internal class IndirectList).
* Example: a list of three objects:
* in the data base: {null, objectA}; {2, objectB}, {5, ObjectC};
* read into application as a list:{objectA, objectB, objectC};
* add a new element to the list: {objectA, objectB, objectC, objectD};
* updated list saved to the db: {null, objectA}, {2, objectB}, {5, objectC}, {3, objectD};
* read again into application: {objectA, objectB, objectD, objectC};
*/
READ,
/**
* Order of the list read into application is corrected, and remembered
* that the invalid list order left in the data base.
* If the list is updated and saved back into the data base
* then all the order indexes are saved ensuring that the list
* order in the data base will be exactly the same as in cache
* (and therefore valid).
* This mode is used by default in case the mapped attribute
* is either List or Vector
* (more precisely: is assignable from Eclipselink internal class IndirectList).
* This mode is used in JPA in case OrderCorrection annotation is not specified.
* Example: a list of three objects:
* in the data base: {null, objectA}; {2, objectB}, {5, ObjectC};
* read into application as a list:{objectA, objectB, objectC};
* add a new element to the list: {objectA, objectB, objectC, objectD};
* updated list saved to the db: {0, objectA}, {1, objectB}, {2, objectC}, {3, objectD};
* read again into application: {objectA, objectB, objectC, objectD};
*/
READ_WRITE,
/**
* Don't correct, throw QueryException with error code QueryException.LIST_ORDER_FIELD_WRONG_VALUE
* Example: a list of three objects:
* in the data base: {null, objectA}; {2, objectB}, {5, ObjectC};
* read into application - exception.
*/
EXCEPTION
}