blob: 077e61ba5396fc75cf6fa48339668088224e3060 [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 org.apache.openjpa.jdbc.kernel;
import java.sql.ResultSet;
import java.sql.Connection;
import java.util.Collection;
import java.util.Set;
import org.apache.openjpa.jdbc.meta.ClassMapping;
import org.apache.openjpa.jdbc.sql.JoinSyntaxes;
import org.apache.openjpa.kernel.FetchConfiguration;
import org.apache.openjpa.meta.FieldMetaData;
/**
* JDBC extensions to OpenJPA's {@link FetchConfiguration}.
*
* @author Abe White
* @since 0.3.0
*/
public interface JDBCFetchConfiguration
extends FetchConfiguration, EagerFetchModes, LRSSizes, JoinSyntaxes {
/**
* Return the eager fetch mode. Defaults to the
* <code>openjpa.jdbc.EagerFetchMode</code> setting.
*/
public int getEagerFetchMode();
/**
* Set the eager fetch mode. Defaults to the
* <code>openjpa.jdbc.EagerFetchMode</code> setting.
*/
public JDBCFetchConfiguration setEagerFetchMode(int mode);
/**
* Return the subclass fetch mode. Defaults to the
* <code>openjpa.jdbc.SubclassFetchMode</code> setting.
*/
public int getSubclassFetchMode();
/**
* Return the effective subclass fetch mode for the given type.
*/
public int getSubclassFetchMode(ClassMapping cls);
/**
* Set the subclass fetch mode. Defaults to the
* <code>openjpa.jdbc.SubclassFetchMode</code> setting.
*/
public JDBCFetchConfiguration setSubclassFetchMode(int mode);
/**
* The result set type to use as a constant from {@link ResultSet}.
* Defaults to the <code>openjpa.jdbc.ResultSetType</code> setting.
*/
public int getResultSetType();
/**
* The result set type to use as a constant from {@link ResultSet}.
* Defaults to the <code>openjpa.jdbc.ResultSetType</code> setting.
*/
public JDBCFetchConfiguration setResultSetType(int type);
/**
* The fetch direction to use as a constant from {@link ResultSet}.
* Defaults to the <code>openjpa.jdbc.FetchDirection</code> setting.
*/
public int getFetchDirection();
/**
* The fetch direction to use as a constant from {@link ResultSet}.
* Defaults to the <code>openjpa.jdbc.FetchDirection</code> setting.
*/
public JDBCFetchConfiguration setFetchDirection(int direction);
/**
* The large result set size mode to use.
* Defaults to the <code>openjpa.jdbc.LRSSize</code> setting.
*/
public int getLRSSize();
/**
* The large result set size mode to use.
* Defaults to the <code>openjpa.jdbc.LRSSize</code> setting.
*/
public JDBCFetchConfiguration setLRSSize(int lrsSize);
/**
* The join syntax to use.
*/
public int getJoinSyntax();
/**
* The join syntax to use.
*/
public JDBCFetchConfiguration setJoinSyntax(int syntax);
/**
* Returns the names of the joins that this component will use
* when loading objects. Defaults to the empty set. This set is not
* thread safe.
*
* @since 0.4.0.0
*/
public Set getJoins();
/**
* Return true if the given fully-qualified join has been added.
*
* @since 0.4.0.0
*/
public boolean hasJoin(String field);
/**
* Adds <code>field</code> to the set of fully-qualified field names to
* eagerly join when loading objects. Each class can have at most
* one to-many eagerly joined fields.
*
* @since 0.4.0.0
*/
public JDBCFetchConfiguration addJoin(String field);
/**
* Adds <code>fields</code> to the set of fully-qualified field names to
* eagerly join when loading objects. Each class can have at most
* one to-many eagerly joined fields.
*
* @since 0.4.0.0
*/
public JDBCFetchConfiguration addJoins(Collection fields);
/**
* Removes <code>field</code> to the set of fully-qualified field names to
* eagerly join when loading objects.
*
* @since 0.4.0.0
*/
public JDBCFetchConfiguration removeJoin(String field);
/**
* Removes <code>fields</code> from the set of fully-qualified
* field names to eagerly join when loading objects.
*
* @since 0.4.0.0
*/
public JDBCFetchConfiguration removeJoins(Collection fields);
/**
* Clears the set of field names to join when loading data.
*
* @since 0.4.0.0
*/
public JDBCFetchConfiguration clearJoins();
/**
* <p>The isolation level for queries issued to the database. This overrides
* the persistence-unit-wide <code>openjpa.jdbc.TransactionIsolation</code>
* value.</p>
*
* <p>Must be one of {@link Connection#TRANSACTION_NONE},
* {@link Connection#TRANSACTION_READ_UNCOMMITTED},
* {@link Connection#TRANSACTION_READ_COMMITTED},
* {@link Connection#TRANSACTION_REPEATABLE_READ},
* {@link Connection#TRANSACTION_SERIALIZABLE},
* or -1 for the default connection level specified by the context in
* which this fetch configuration is being used.</p>
*
* @since 0.9.7
*/
public int getIsolation();
/**
* <p>The isolation level for queries issued to the database. This overrides
* the persistence-unit-wide <code>openjpa.jdbc.TransactionIsolation</code>
* value.</p>
*
* <p>Must be one of {@link Connection#TRANSACTION_NONE},
* {@link Connection#TRANSACTION_READ_UNCOMMITTED},
* {@link Connection#TRANSACTION_READ_COMMITTED},
* {@link Connection#TRANSACTION_REPEATABLE_READ},
* {@link Connection#TRANSACTION_SERIALIZABLE},
* or -1 for the default connection level specified by the context in
* which this fetch configuration is being used.</p>
*
* @since 0.9.7
*/
public JDBCFetchConfiguration setIsolation(int level);
/**
* Convenience method to cast traversal to store-specific type.
*/
public JDBCFetchConfiguration traverseJDBC(FieldMetaData fm);
/**
* Returns the names of the inner fetch joins that this component will use
* when loading objects. Defaults to the empty set. This set is not
* thread safe.
*
* @since 1.0.3
*/
public Set getFetchInnerJoins();
/**
* Return true if the given fully-qualified inner fetch join has been added.
*
* @since 1.0.3
*/
public boolean hasFetchInnerJoin(String field);
/**
* Adds <code>field</code> to the set of fully-qualified field names to
* eagerly join when loading objects. Each class can have at most
* one to-many eagerly joined fields.
*
* @since 1.0.3
*/
public JDBCFetchConfiguration addFetchInnerJoin(String field);
/**
* Adds <code>fields</code> to the set of fully-qualified field names to
* eagerly join when loading objects. Each class can have at most
* one to-many eagerly joined fields.
*
* @since 1.0.3
*/
public JDBCFetchConfiguration addFetchInnerJoins(Collection fields);
}