Package org.apache.cayenne.dba.oracle
Class OraclePkGenerator
- java.lang.Object
-
- org.apache.cayenne.dba.JdbcPkGenerator
-
- org.apache.cayenne.dba.oracle.OraclePkGenerator
-
- All Implemented Interfaces:
PkGenerator
- Direct Known Subclasses:
DB2PkGenerator
,DerbyPkGenerator
,H2PkGenerator
,IngresPkGenerator
,PostgresPkGenerator
,SQLServerPkGenerator
public class OraclePkGenerator extends JdbcPkGenerator
Sequence-based primary key generator implementation for Oracle. Uses Oracle sequences to generate primary key values. This approach is at least 50% faster when tested with Oracle compared to the lookup table approach.When using Cayenne key caching mechanism, make sure that sequences in the database have "INCREMENT BY" greater or equal to OraclePkGenerator "pkCacheSize" property value. If this is not the case, you will need to adjust PkGenerator value accordingly. For example when sequence is incremented by 1 each time, use the following code:
dataNode.getAdapter().getPkGenerator().setPkCacheSize(1);
-
-
Field Summary
-
Fields inherited from class org.apache.cayenne.dba.JdbcPkGenerator
adapter, DEFAULT_PK_CACHE_SIZE, pkCache, pkCacheSize, pkStartValue
-
-
Constructor Summary
Constructors Modifier Constructor Description OraclePkGenerator()
Used by DIprotected
OraclePkGenerator(JdbcAdapter adapter)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
createAutoPk(DataNode node, List<DbEntity> dbEntities)
Generates necessary database objects to provide automatic primary key support.List<String>
createAutoPkStatements(List<DbEntity> dbEntities)
Creates a list of CREATE SEQUENCE statements for the list of DbEntities.protected String
createSequenceString(DbEntity ent)
void
dropAutoPk(DataNode node, List<DbEntity> dbEntities)
Drops PK sequences for all specified DbEntities.List<String>
dropAutoPkStatements(List<DbEntity> dbEntities)
Creates a list of DROP SEQUENCE statements for the list of DbEntities.protected String
dropSequenceString(DbEntity ent)
Returns a SQL string needed to drop any database objects associated with automatic primary key generation process for a specific DbEntity.protected List<String>
getExistingSequences(DataNode node)
Fetches a list of existing sequences that might match Cayenne generated ones.protected String
getSequencePrefix()
protected long
longPkFromDatabase(DataNode node, DbEntity entity)
Generates primary key by calling Oracle sequence corresponding to thedbEntity
.protected int
pkCacheSize(DbEntity entity)
protected String
selectAllSequencesQuery()
protected String
selectNextValQuery(String pkGeneratingSequenceName)
protected String
sequenceName(DbEntity entity)
Returns expected primary key sequence name for a DbEntity.-
Methods inherited from class org.apache.cayenne.dba.JdbcPkGenerator
autoPkTableExists, dropAutoPkString, generatePk, getAdapter, getPkCacheSize, pkCreateString, pkDeleteString, pkSelectString, pkTableCreateString, pkUpdateString, reset, runUpdate, setAdapter, setPkCacheSize
-
-
-
-
Constructor Detail
-
OraclePkGenerator
public OraclePkGenerator()
Used by DI- Since:
- 4.1
-
OraclePkGenerator
protected OraclePkGenerator(JdbcAdapter adapter)
-
-
Method Detail
-
createAutoPk
public void createAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception
Description copied from interface:PkGenerator
Generates necessary database objects to provide automatic primary key support.- Specified by:
createAutoPk
in interfacePkGenerator
- Overrides:
createAutoPk
in classJdbcPkGenerator
- Parameters:
node
- node that provides access to a DataSource.dbEntities
- a list of entities that require primary key auto-generation support- Throws:
Exception
-
createAutoPkStatements
public List<String> createAutoPkStatements(List<DbEntity> dbEntities)
Creates a list of CREATE SEQUENCE statements for the list of DbEntities.- Specified by:
createAutoPkStatements
in interfacePkGenerator
- Overrides:
createAutoPkStatements
in classJdbcPkGenerator
-
dropAutoPk
public void dropAutoPk(DataNode node, List<DbEntity> dbEntities) throws Exception
Drops PK sequences for all specified DbEntities.- Specified by:
dropAutoPk
in interfacePkGenerator
- Overrides:
dropAutoPk
in classJdbcPkGenerator
- Parameters:
node
- node that provides access to a DataSource.dbEntities
- a list of entities whose primary key auto-generation support should be dropped.- Throws:
Exception
-
dropAutoPkStatements
public List<String> dropAutoPkStatements(List<DbEntity> dbEntities)
Creates a list of DROP SEQUENCE statements for the list of DbEntities.- Specified by:
dropAutoPkStatements
in interfacePkGenerator
- Overrides:
dropAutoPkStatements
in classJdbcPkGenerator
-
dropSequenceString
protected String dropSequenceString(DbEntity ent)
Returns a SQL string needed to drop any database objects associated with automatic primary key generation process for a specific DbEntity.
-
selectAllSequencesQuery
protected String selectAllSequencesQuery()
-
longPkFromDatabase
protected long longPkFromDatabase(DataNode node, DbEntity entity) throws Exception
Generates primary key by calling Oracle sequence corresponding to thedbEntity
. Executed SQL looks like this:SELECT pk_table_name.nextval FROM DUAL
- Overrides:
longPkFromDatabase
in classJdbcPkGenerator
- Throws:
Exception
- Since:
- 3.0
-
pkCacheSize
protected int pkCacheSize(DbEntity entity)
-
sequenceName
protected String sequenceName(DbEntity entity)
Returns expected primary key sequence name for a DbEntity.
-
getSequencePrefix
protected String getSequencePrefix()
-
getExistingSequences
protected List<String> getExistingSequences(DataNode node) throws SQLException
Fetches a list of existing sequences that might match Cayenne generated ones.- Throws:
SQLException
-
-