org.castor.cpa.persistence.sql.keygen
Class AbstractKeyGenerator

java.lang.Object
  extended by org.castor.cpa.persistence.sql.keygen.AbstractKeyGenerator
All Implemented Interfaces:
KeyGenerator
Direct Known Subclasses:
SequenceKeyGenerator

public abstract class AbstractKeyGenerator
extends java.lang.Object
implements KeyGenerator

Author:
Stein M. Hugubakken

Field Summary
protected  PersistenceFactory _factory
           
protected  java.lang.String _factoryName
           
 
Fields inherited from interface org.exolab.castor.persist.spi.KeyGenerator
AFTER_INSERT, BEFORE_INSERT, DURING_INSERT
 
Constructor Summary
AbstractKeyGenerator()
           
 
Method Summary
protected  void checkSupportedFactory(PersistenceFactory factory)
           
protected  SqlTypeHandler getSqlTypeHandler()
           
 byte getStyle()
          Style of the key generator: BEFORE_INSERT, DURING_INSERT or AFTER_INSERT.
protected abstract  java.lang.String[] getSupportedFactoryNames()
           
protected  void initSqlTypeHandler(int sqlType)
           
 boolean isInSameConnection()
          Is key generated in the same connection as INSERT? For DURING_INSERT style this method is never called.
 java.lang.String patchSQL(java.lang.String insert, java.lang.String primKeyName)
          Gives a possibility to patch the Castor-generated SQL statement for INSERT (indended mainly for DURING_INSERT style of key generators, other key generators usually simply return the passed parameter).
protected  void setStyle(byte style)
           
 void supportsSqlType(int sqlType)
          Determine if the key generator supports a given sql type.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.exolab.castor.persist.spi.KeyGenerator
generateKey
 

Field Detail

_factory

protected PersistenceFactory _factory

_factoryName

protected java.lang.String _factoryName
Constructor Detail

AbstractKeyGenerator

public AbstractKeyGenerator()
Method Detail

checkSupportedFactory

protected void checkSupportedFactory(PersistenceFactory factory)
                              throws MappingException
Throws:
MappingException

getSupportedFactoryNames

protected abstract java.lang.String[] getSupportedFactoryNames()

initSqlTypeHandler

protected void initSqlTypeHandler(int sqlType)

getSqlTypeHandler

protected SqlTypeHandler getSqlTypeHandler()

supportsSqlType

public void supportsSqlType(int sqlType)
                     throws MappingException
Determine if the key generator supports a given sql type.

Specified by:
supportsSqlType in interface KeyGenerator
Throws:
MappingException

setStyle

protected final void setStyle(byte style)

getStyle

public final byte getStyle()
Style of the key generator: BEFORE_INSERT, DURING_INSERT or AFTER_INSERT.

Specified by:
getStyle in interface KeyGenerator

patchSQL

public java.lang.String patchSQL(java.lang.String insert,
                                 java.lang.String primKeyName)
                          throws MappingException
Gives a possibility to patch the Castor-generated SQL statement for INSERT (indended mainly for DURING_INSERT style of key generators, other key generators usually simply return the passed parameter). The original statement contains primary key column on the first place for BEFORE_INSERT style and doesn't contain it for the other styles. This method is called once for each class and must return String with '?' that can be passed to CallableStatement (for DURING_INSERT style) or to PreparedStatement (for the others). Then for each record being created actual field values are substituted, starting from the primary key value for BEFORE_INSERT style, of starting from the first of other fields for the other styles. The DURING_INSERT key generator must add one OUT parameter to the end of the parameter list, which will return the generated identity. For example, ReturningKeyGenerator for Oracle8i transforms "INSERT INTO tbl (pk, fld1, ...,fldN) VALUES (?,?...,?)" to "INSERT INTO tbl (pk, fld1, ...) VALUES (seq.nextval,?....,?) RETURNING pk INTO ?". DURING_INSERT key generator also may be implemented as a stored procedure.

Specified by:
patchSQL in interface KeyGenerator
Parameters:
insert - Castor-generated INSERT statement
primKeyName - The primary key name
Throws:
MappingException

isInSameConnection

public boolean isInSameConnection()
Is key generated in the same connection as INSERT? For DURING_INSERT style this method is never called.

Specified by:
isInSameConnection in interface KeyGenerator


Copyright © 2011. All Rights Reserved.