case Relation.MANY_TO_MANY_BI:
relTable = storeMgr.getDatastoreClass(mmd.getCollection().getElementType(), clr);
cmd = mmd.getCollection().getElementClassMetaData(clr, mmgr);
relMmd = mmd.getRelatedMemberMetaData(clr)[0];
// Join to join table, then to related table
CollectionTable joinTbl = (CollectionTable)storeMgr.getDatastoreContainerObject(mmd);
if (joinType == JoinType.JOIN_INNER || joinType == JoinType.JOIN_INNER_FETCH)
{
SQLTable joinSqlTbl = stmt.innerJoin(sqlTbl, sqlTbl.getTable().getIdMapping(),
joinTbl, null, joinTbl.getOwnerMapping(), null, null);
sqlTbl = stmt.innerJoin(joinSqlTbl, joinTbl.getElementMapping(),
relTable, null, relTable.getIdMapping(), null, joinTableGroupName);
}
else
{
SQLTable joinSqlTbl = stmt.leftOuterJoin(sqlTbl, sqlTbl.getTable().getIdMapping(),
joinTbl, null, joinTbl.getOwnerMapping(), null, null);
sqlTbl = stmt.leftOuterJoin(joinSqlTbl, joinTbl.getElementMapping(),
relTable, null, relTable.getIdMapping(), null, joinTableGroupName);
}
break;
case Relation.MANY_TO_ONE_BI:
relTable = storeMgr.getDatastoreClass(mmd.getTypeName(), clr);
cmd = storeMgr.getMetaDataManager().getMetaDataForClass(mmd.getType(), clr);
relMmd = mmd.getRelatedMemberMetaData(clr)[0];
if (mmd.getJoinMetaData() != null || relMmd.getJoinMetaData() != null)
{
// Join to join table, then to related table
joinTbl = (CollectionTable)storeMgr.getDatastoreContainerObject(relMmd);
if (joinType == JoinType.JOIN_INNER || joinType == JoinType.JOIN_INNER_FETCH)
{
SQLTable joinSqlTbl = stmt.innerJoin(sqlTbl, sqlTbl.getTable().getIdMapping(),
joinTbl, null, joinTbl.getElementMapping(), null, null);
sqlTbl = stmt.innerJoin(joinSqlTbl, joinTbl.getOwnerMapping(),
relTable, null, relTable.getIdMapping(), null, joinTableGroupName);
}
else
{
SQLTable joinSqlTbl = stmt.leftOuterJoin(sqlTbl, sqlTbl.getTable().getIdMapping(),
joinTbl, null, joinTbl.getElementMapping(), null, null);
sqlTbl = stmt.leftOuterJoin(joinSqlTbl, joinTbl.getOwnerMapping(),
relTable, null, relTable.getIdMapping(), null, joinTableGroupName);
}
}
else
{