org.jpox.store.rdbms.scostore
Class JoinSetStore

java.lang.Object
  extended by org.jpox.store.rdbms.scostore.ElementContainerStore
      extended by org.jpox.store.rdbms.scostore.AbstractCollectionStore
          extended by org.jpox.store.rdbms.scostore.JoinSetStore
All Implemented Interfaces:
org.jpox.store.mapped.scostore.CollectionStoreQueryable, org.jpox.store.scostore.CollectionStore, org.jpox.store.scostore.SetStore, org.jpox.store.scostore.Store

public class JoinSetStore
extends AbstractCollectionStore

Representation of a Normal Set as part of a relationship. This class is used where you have a 1-N and the tables are joined via a link table. That is one table is the owner, and it has a link table to another table, with the link table having 2 columns - the ids of the 2 tables. This is in contrast to InverseSetStore which represents 1-N relationships without using a link table (using an id in the other table).

For sets of primitive types (eg Date,String etc), the NormalSetStore is used, but the 'link' table contains the id of the owner and the field(s) representing the primitive type.

Version:
$Revision: 1.53 $

Nested Class Summary
 
Nested classes/interfaces inherited from class org.jpox.store.rdbms.scostore.ElementContainerStore
ElementContainerStore.ElementInfo
 
Field Summary
protected  boolean allowsNull
          Whether the container allows null elements/values.
protected  org.jpox.store.mapped.DatastoreAdapter dba
          Datastore adapter in use by this store.
protected static org.jpox.util.Localiser LOCALISER
          Localiser for messages.
protected  java.lang.String locateStmt
          Statement to check the existence of an owner-element relation.
protected  boolean m2n
          Whether this relation is one end of an M-N relation.
protected  java.lang.String maxOrderColumnIdStmt
          Statement to get the maximum order column id so we can set the next insert value.
protected  org.jpox.store.mapped.mapping.JavaTypeMapping ownerMapping
          Mapping to the owner of the container.
protected  org.jpox.metadata.AbstractMemberMetaData ownerMemberMetaData
          MetaData for the field/property in the owner with this container.
protected  java.lang.String setName
           
protected  RDBMSManager storeMgr
          Manager for the store.
 
Fields inherited from class org.jpox.store.rdbms.scostore.AbstractCollectionStore
containsStmt
 
Fields inherited from class org.jpox.store.rdbms.scostore.ElementContainerStore
addStmt, clearStmt, clr, containerTable, elementInfo, elementIsPersistentInterface, elementMapping, elementsAreEmbedded, elementsAreSerialised, elementType, elmIdentifier, emd, iterateUsingDiscriminator, orderMapping, relationDiscriminatorMapping, relationDiscriminatorValue, removeStmt, usingDiscriminatorInSizeStmt
 
Constructor Summary
JoinSetStore(org.jpox.metadata.AbstractMemberMetaData fmd, CollectionTable joinTable, org.jpox.ClassLoaderResolver clr)
          Constructor for the relationship representation.
 
Method Summary
 boolean add(org.jpox.StateManager sm, java.lang.Object element, int size)
          Adds one element to the association owner vs elements.
 boolean addAll(org.jpox.StateManager sm, java.util.Collection elements, int size)
          Adds all elements from a collection to the association container.
protected  boolean allowsBatching()
          Convenience method to return if the RDBMS supports batching and the user wants batching.
protected  org.jpox.store.mapped.expression.QueryExpression getIteratorStatement(org.jpox.StateManager ownerSM)
          Accessor for the statement for the iterator.
 org.jpox.store.mapped.mapping.JavaTypeMapping getOwnerMapping()
          Accessor for the owner mapping.
protected  java.lang.String getRemoveAllStmt(org.jpox.StateManager ownerSm, java.util.Collection elements)
          Generate statement for removing a collection of items from the Set.
protected  java.lang.String getRemoveStmt()
          Generate statement for deleting items from the Set.
protected  org.jpox.StateManager getStateManagerForEmbeddedPCObject(org.jpox.StateManager sm, java.lang.Object obj, JoinTable table)
          Method to return the StateManager for an embedded PC object (element, key, value).
 org.jpox.store.StoreManager getStoreManager()
          Accessor for the RDBMSManager.
protected  int[] internalAdd(org.jpox.StateManager ownerSM, org.jpox.ManagedConnection conn, boolean batched, java.lang.Object element, boolean processNow)
          Method to process an "add" statement.
protected  int[] internalRemove(org.jpox.StateManager ownerSM, org.jpox.ManagedConnection conn, boolean batched, java.lang.Object element, boolean executeNow)
          Method to process a "remove" statement.
protected  boolean isEmbeddedMapping(org.jpox.store.mapped.mapping.JavaTypeMapping mapping)
          Check if the mapping correspond to a non pc object or embedded field
 java.util.Iterator iterator(org.jpox.StateManager ownerSM)
          Accessor for an iterator for the set.
 org.jpox.store.mapped.expression.ScalarExpression joinElementsTo(org.jpox.store.mapped.expression.QueryExpression stmt, org.jpox.store.mapped.expression.QueryExpression parentStmt, org.jpox.store.mapped.mapping.JavaTypeMapping ownerMapping, org.jpox.store.mapped.expression.LogicSetExpression ownerTblExpr, org.jpox.store.mapped.DatastoreIdentifier setTableAlias, java.lang.Class filteredElementType, org.jpox.store.mapped.expression.ScalarExpression elementExpr, org.jpox.store.mapped.DatastoreIdentifier elementTableAlias, boolean existsQuery)
          Utility for use in building a query, joining the element table and the owner table.
 boolean locate(org.jpox.StateManager sm, java.lang.Object element)
          Method to check for the existence in the datastore of an owner-element relation.
 org.jpox.store.mapped.expression.QueryExpression newQueryStatement(org.jpox.StateManager sm, java.lang.String candidateClass, org.jpox.store.mapped.DatastoreIdentifier candidateAlias)
          Utility method to return a new QueryStatement for retrieval of the elements of this Set.
protected  int populateOwnerInStatement(org.jpox.StateManager sm, org.jpox.ObjectManager om, java.sql.PreparedStatement ps, int jdbcPosition)
          Convenience method to populate the passed PreparedStatement with the value from the owner.
 boolean remove(org.jpox.StateManager sm, java.lang.Object element, int size, boolean allowDependentField)
          Removes the association to one element
 boolean removeAll(org.jpox.StateManager sm, java.util.Collection elements, int size)
          Remove all elements from a collection from the association owner vs elements.
protected  void setOwnerMemberMetaData(org.jpox.metadata.AbstractMemberMetaData mmd)
          Method to set the owner field/property MetaData and sets whether null elements/values are allowed.
 
Methods inherited from class org.jpox.store.rdbms.scostore.AbstractCollectionStore
contains, getContainsStmt, getExistsSubquery, getSizeSubquery, getUpdateEmbeddedElementStmt, updateEmbeddedElement
 
Methods inherited from class org.jpox.store.rdbms.scostore.ElementContainerStore
clear, getAddStmt, getClearStmt, getElementInformationForClass, getElementType, getSizeStmt, hasOrderMapping, newResultObjectFactory, populateElementDiscriminatorInStatement, populateElementInStatement, populateEmbeddedElementFieldsInStatement, populateOrderInStatement, populateRelationDiscriminatorInStatement, size, validateElementForReading, validateElementForWriting, validateElementType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.jpox.store.scostore.CollectionStore
clear, contains, getElementType, hasOrderMapping, size, updateEmbeddedElement
 
Methods inherited from interface org.jpox.store.scostore.Store
getStoreManager
 
Methods inherited from interface org.jpox.store.mapped.scostore.CollectionStoreQueryable
newResultObjectFactory
 

Field Detail

locateStmt

protected java.lang.String locateStmt
Statement to check the existence of an owner-element relation.


maxOrderColumnIdStmt

protected java.lang.String maxOrderColumnIdStmt
Statement to get the maximum order column id so we can set the next insert value.


m2n

protected final boolean m2n
Whether this relation is one end of an M-N relation.


setName

protected java.lang.String setName

LOCALISER

protected static final org.jpox.util.Localiser LOCALISER
Localiser for messages.


storeMgr

protected RDBMSManager storeMgr
Manager for the store.


dba

protected org.jpox.store.mapped.DatastoreAdapter dba
Datastore adapter in use by this store.


ownerMapping

protected org.jpox.store.mapped.mapping.JavaTypeMapping ownerMapping
Mapping to the owner of the container.


ownerMemberMetaData

protected org.jpox.metadata.AbstractMemberMetaData ownerMemberMetaData
MetaData for the field/property in the owner with this container.


allowsNull

protected boolean allowsNull
Whether the container allows null elements/values.

Constructor Detail

JoinSetStore

public JoinSetStore(org.jpox.metadata.AbstractMemberMetaData fmd,
                    CollectionTable joinTable,
                    org.jpox.ClassLoaderResolver clr)
Constructor for the relationship representation.

Parameters:
joinTable - The table for the link
clr - The ClassLoaderResolver
Method Detail

getRemoveStmt

protected java.lang.String getRemoveStmt()
Generate statement for deleting items from the Set. The EMBEDDEDFIELDX is only present when the elements are PC(embedded).
 DELETE FROM SETTABLE 
 WHERE OWNERCOL=?
 AND ELEMENTCOL = ?
 [AND EMBEDDEDFIELD1 = ? AND EMBEDDEDFIELD2 = ? AND EMBEDDEDFIELD3 = ?]
 [AND RELATION_DISCRIM = ?]
 

Overrides:
getRemoveStmt in class AbstractCollectionStore
Returns:
Statement for deleting items from the Set.

getRemoveAllStmt

protected java.lang.String getRemoveAllStmt(org.jpox.StateManager ownerSm,
                                            java.util.Collection elements)
Generate statement for removing a collection of items from the Set.
 DELETE FROM SETTABLE 
 WHERE (OWNERCOL=? AND ELEMENTCOL=?) OR
      (OWNERCOL=? AND ELEMENTCOL=?) OR
      (OWNERCOL=? AND ELEMENTCOL=?)
 

Parameters:
ownerSm - The owner StateManager
elements - Collection of elements to remove
Returns:
Statement for deleting items from the Set.

removeAll

public boolean removeAll(org.jpox.StateManager sm,
                         java.util.Collection elements,
                         int size)
Remove all elements from a collection from the association owner vs elements.

Specified by:
removeAll in interface org.jpox.store.scostore.CollectionStore
Parameters:
sm - State Manager for the container
elements - Collection of elements to remove
Returns:
Whether the database was updated

locate

public boolean locate(org.jpox.StateManager sm,
                      java.lang.Object element)
Method to check for the existence in the datastore of an owner-element relation.

Parameters:
sm - State Manager for the owner
element - The element
Returns:
Whether the relation exists in the datastore

add

public boolean add(org.jpox.StateManager sm,
                   java.lang.Object element,
                   int size)
Adds one element to the association owner vs elements.

Specified by:
add in interface org.jpox.store.scostore.CollectionStore
Parameters:
sm - State Manager for the container.
element - Element to add
Returns:
Whether it was successful

addAll

public boolean addAll(org.jpox.StateManager sm,
                      java.util.Collection elements,
                      int size)
Adds all elements from a collection to the association container.

Specified by:
addAll in interface org.jpox.store.scostore.CollectionStore
Parameters:
sm - State Manager for the container.
elements - Collection of elements to add
size - Current size of set (if known). Not used by sets
Returns:
Whether it was successful

getIteratorStatement

protected org.jpox.store.mapped.expression.QueryExpression getIteratorStatement(org.jpox.StateManager ownerSM)
Accessor for the statement for the iterator.

Parameters:
ownerSM - the owner StateManager
Returns:
The iterator Query Statement.

newQueryStatement

public org.jpox.store.mapped.expression.QueryExpression newQueryStatement(org.jpox.StateManager sm,
                                                                          java.lang.String candidateClass,
                                                                          org.jpox.store.mapped.DatastoreIdentifier candidateAlias)
Utility method to return a new QueryStatement for retrieval of the elements of this Set.

Parameters:
sm - StateManager for this object
candidateClass - Class for the element end of the link.
candidateAlias - Alias for the candidate
Returns:
The QueryStatement

joinElementsTo

public org.jpox.store.mapped.expression.ScalarExpression joinElementsTo(org.jpox.store.mapped.expression.QueryExpression stmt,
                                                                        org.jpox.store.mapped.expression.QueryExpression parentStmt,
                                                                        org.jpox.store.mapped.mapping.JavaTypeMapping ownerMapping,
                                                                        org.jpox.store.mapped.expression.LogicSetExpression ownerTblExpr,
                                                                        org.jpox.store.mapped.DatastoreIdentifier setTableAlias,
                                                                        java.lang.Class filteredElementType,
                                                                        org.jpox.store.mapped.expression.ScalarExpression elementExpr,
                                                                        org.jpox.store.mapped.DatastoreIdentifier elementTableAlias,
                                                                        boolean existsQuery)
Utility for use in building a query, joining the element table and the owner table.

Parameters:
stmt - The Query Statement
parentStmt - the parent Query Statement. If no parent, "parentStmt" must be equal to "stmt"
ownerMapping - the mapping for the owner
ownerTblExpr - Table Expression for the owner
filteredElementType - The Class Type for the filtered element
elementExpr - The Expression for the element
elementTableAlias - The SQL alias to assign to the element table expression
setTableAlias - The alias for the "Set" table
existsQuery - Whether this is joining for an EXISTS query
Returns:
Expression for the join

iterator

public java.util.Iterator iterator(org.jpox.StateManager ownerSM)
Accessor for an iterator for the set.

Specified by:
iterator in interface org.jpox.store.scostore.CollectionStore
Specified by:
iterator in class ElementContainerStore
Parameters:
ownerSM - State Manager for the set.
Returns:
Iterator for the set.

internalAdd

protected int[] internalAdd(org.jpox.StateManager ownerSM,
                            org.jpox.ManagedConnection conn,
                            boolean batched,
                            java.lang.Object element,
                            boolean processNow)
                     throws java.sql.SQLException
Method to process an "add" statement.

Parameters:
ownerSM - StateManager for the owner
conn - The connection
batched - Whether we are batching it
element - The element
Returns:
Number of datastore records changed (always 0 if batch since nothing yet changed)
Throws:
java.sql.SQLException - Thrown if an error occurs

remove

public boolean remove(org.jpox.StateManager sm,
                      java.lang.Object element,
                      int size,
                      boolean allowDependentField)
Removes the association to one element

Specified by:
remove in interface org.jpox.store.scostore.CollectionStore
Parameters:
sm - State Manager for the container
element - Element to remove
size - Current size
allowDependentField - Whether to allow any cascade deletes caused by this removal
Returns:
Whether it was successful

internalRemove

protected int[] internalRemove(org.jpox.StateManager ownerSM,
                               org.jpox.ManagedConnection conn,
                               boolean batched,
                               java.lang.Object element,
                               boolean executeNow)
                        throws java.sql.SQLException
Method to process a "remove" statement.

Overrides:
internalRemove in class AbstractCollectionStore
Parameters:
ownerSM - StateManager for the owner
conn - The connection
batched - Whether we are batching it
element - The element
executeNow - Whether to execute the statement rather than allow batching til later
Returns:
Number of records changed (0 if batch since nothing yet changed)
Throws:
java.sql.SQLException - Thrown if an error occurs

setOwnerMemberMetaData

protected void setOwnerMemberMetaData(org.jpox.metadata.AbstractMemberMetaData mmd)
Method to set the owner field/property MetaData and sets whether null elements/values are allowed.

Parameters:
mmd - MetaData for the field/property owning this backing store.

getStoreManager

public org.jpox.store.StoreManager getStoreManager()
Accessor for the RDBMSManager.

Returns:
The RDBMSManager.

getOwnerMapping

public org.jpox.store.mapped.mapping.JavaTypeMapping getOwnerMapping()
Accessor for the owner mapping.

Returns:
Owner mapping.

isEmbeddedMapping

protected boolean isEmbeddedMapping(org.jpox.store.mapped.mapping.JavaTypeMapping mapping)
Check if the mapping correspond to a non pc object or embedded field

Parameters:
mapping - the mapping
Returns:
true if the field is embedded into one column

populateOwnerInStatement

protected int populateOwnerInStatement(org.jpox.StateManager sm,
                                       org.jpox.ObjectManager om,
                                       java.sql.PreparedStatement ps,
                                       int jdbcPosition)
Convenience method to populate the passed PreparedStatement with the value from the owner.

Parameters:
sm - State Manager
om - Object Manager
ps - The PreparedStatement
jdbcPosition - Position in JDBC statement to populate
Returns:
The next position in the JDBC statement

getStateManagerForEmbeddedPCObject

protected org.jpox.StateManager getStateManagerForEmbeddedPCObject(org.jpox.StateManager sm,
                                                                   java.lang.Object obj,
                                                                   JoinTable table)
Method to return the StateManager for an embedded PC object (element, key, value). It creates one if the element is not currently managed.

Parameters:
sm - State Manager of the owner
obj - The embedded PC object
table - Join table where the objects are stored
Returns:
The state manager

allowsBatching

protected boolean allowsBatching()
Convenience method to return if the RDBMS supports batching and the user wants batching.

Returns:
If batching of statements is permissible


Copyright © -2008 . All Rights Reserved.