org.datanucleus.store.mapped.mapping
Class MultiPersistableMapping

java.lang.Object
  extended by org.datanucleus.store.mapped.mapping.JavaTypeMapping
      extended by org.datanucleus.store.mapped.mapping.MultiMapping
          extended by org.datanucleus.store.mapped.mapping.MultiPersistableMapping
Direct Known Subclasses:
ReferenceMapping, SubclassPCMapping

public abstract class MultiPersistableMapping
extends MultiMapping

Extension of MultiMapping where the actual mapping represents multiple possible persistable types such as with an interface/reference field. For example, with an interface mapping we have say 3 known implementations of the interface, so this mapping represents 3 FKs. A maximum of one will be set and the others null.


Field Summary
 
Fields inherited from class org.datanucleus.store.mapped.mapping.MultiMapping
javaTypeMappings, numberOfDatastoreMappings
 
Fields inherited from class org.datanucleus.store.mapped.mapping.JavaTypeMapping
absFieldNumber, datastoreContainer, datastoreMappings, LOCALISER, mmd, referenceMapping, roleForMember, storeMgr, type
 
Constructor Summary
MultiPersistableMapping()
           
 
Method Summary
protected  int getMappingNumberForValue(ExecutionContext ec, Object value)
          Convenience accessor for the number of the java type mapping where the passed value would be stored.
 Object getObject(ExecutionContext ec, Object rs, int[] pos)
          Method to retrieve an object of this type from the ResultSet.
 void setObject(ExecutionContext ec, Object ps, int[] pos, Object value)
          Method to set the parameters in the PreparedStatement with the fields of this object.
 void setObject(ExecutionContext ec, Object ps, int[] pos, Object value, ObjectProvider ownerSM, int ownerFieldNumber)
          Sets the specified positions in the PreparedStatement associated with this field, and value.
 
Methods inherited from class org.datanucleus.store.mapped.mapping.MultiMapping
addJavaTypeMapping, getDatastoreMapping, getDatastoreMappings, getJavaTypeMapping, getNumberOfDatastoreMappings
 
Methods inherited from class org.datanucleus.store.mapped.mapping.JavaTypeMapping
addDatastoreMapping, equals, failureMessage, getAbsoluteFieldNumber, getBoolean, getByte, getChar, getColumnMetaDataForMember, getDatastoreContainer, getDouble, getFloat, getInt, getJavaType, getJavaTypeForDatastoreMapping, getLong, getMemberMetaData, getObject, getReferenceMapping, getRoleForMember, getShort, getStoreManager, getString, getType, getValueForDatastoreMapping, hashCode, hasSimpleDatastoreRepresentation, includeInFetchStatement, includeInInsertStatement, includeInUpdateStatement, initialize, initialize, isNullable, isSerialised, representableAsStringLiteralInStatement, setAbsFieldNumber, setBoolean, setByte, setChar, setDatastoreContainer, setDouble, setFloat, setInt, setLong, setMemberMetaData, setReferenceMapping, setRoleForMember, setShort, setString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MultiPersistableMapping

public MultiPersistableMapping()
Method Detail

getMappingNumberForValue

protected int getMappingNumberForValue(ExecutionContext ec,
                                       Object value)
Convenience accessor for the number of the java type mapping where the passed value would be stored. If no suitable mapping is found will return -1. If is a persistent interface then will return -2 meaning persist against *any* mapping

Parameters:
ec - ExecutionContext
value - The value
Returns:
The index of javaTypeMappings to use (if any), or -1 (none), or -2 (any)

setObject

public void setObject(ExecutionContext ec,
                      Object ps,
                      int[] pos,
                      Object value)
Method to set the parameters in the PreparedStatement with the fields of this object.

Overrides:
setObject in class JavaTypeMapping
Parameters:
ec - execution context
ps - The PreparedStatement
pos - The parameter positions
value - The object to populate the statement with
Throws:
NotYetFlushedException - Thrown if the object is not yet flushed to the datastore

setObject

public void setObject(ExecutionContext ec,
                      Object ps,
                      int[] pos,
                      Object value,
                      ObjectProvider ownerSM,
                      int ownerFieldNumber)
Sets the specified positions in the PreparedStatement associated with this field, and value. If the number of positions in "pos" is not the same as the number of datastore mappings then it is assumed that we should only set the positions for the real implementation FK; this happens where we have a statement like "... WHERE IMPL1_ID_OID = ? AND IMPL2_ID_OID IS NULL" so we need to filter on the other implementations being null and only want to input parameter(s) for the real implementation of "value".

Overrides:
setObject in class JavaTypeMapping
Parameters:
ec - execution context
ps - a datastore object that executes statements in the database
pos - The position(s) of the PreparedStatement to populate
value - the value stored in this field
ownerSM - the owner StateManager
ownerFieldNumber - the owner absolute field number

getObject

public Object getObject(ExecutionContext ec,
                        Object rs,
                        int[] pos)
Method to retrieve an object of this type from the ResultSet.

Overrides:
getObject in class JavaTypeMapping
Parameters:
ec - execution context
rs - The ResultSet
pos - The parameter positions
Returns:
The object


Copyright © 2012. All Rights Reserved.