You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2005/09/18 15:26:15 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/metadata DescriptorRepository.java
brj 2005/09/18 06:26:15
Modified: src/java/org/apache/ojb/broker/accesslayer/sql
SqlQueryStatement.java SqlSelectStatement.java
SqlSelectByPkStatement.java TableAliasHandler.java
src/java/org/apache/ojb/broker/accesslayer
RowReaderDefaultImpl.java
src/java/org/apache/ojb/broker/core
QueryReferenceBroker.java
src/java/org/apache/ojb/broker/util SqlHelper.java
src/java/org/apache/ojb/broker/metadata
DescriptorRepository.java
Log:
First try to fix OJB-63. The Creation of the PK-Query in SqlSelectByPkStatement needs improvement !
Revision Changes Path
1.101 +10 -1 db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java
Index: SqlQueryStatement.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -r1.100 -r1.101
--- SqlQueryStatement.java 27 Aug 2005 12:05:04 -0000 1.100
+++ SqlQueryStatement.java 18 Sep 2005 13:26:14 -0000 1.101
@@ -1325,6 +1325,15 @@
}
/**
+ * Gets the TableAlias for a ClassDescriptor.
+ * @return Returns a TableAlias
+ */
+ protected TableAlias getTableAliasForClassDescriptor(ClassDescriptor aCld)
+ {
+ return m_tableAliasHandler.getTableAliasForClassDescriptor(aCld);
+ }
+
+ /**
* Gets the search table of this query.
* @return Returns a TableAlias
*/
1.41 +94 -18 db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java
Index: SqlSelectStatement.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectStatement.java,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- SqlSelectStatement.java 27 Aug 2005 12:05:04 -0000 1.40
+++ SqlSelectStatement.java 18 Sep 2005 13:26:14 -0000 1.41
@@ -19,15 +19,19 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import org.apache.commons.collections.set.ListOrderedSet;
import org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.TableAlias;
import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.DescriptorRepository;
import org.apache.ojb.broker.metadata.FieldDescriptor;
import org.apache.ojb.broker.platforms.Platform;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryByCriteria;
import org.apache.ojb.broker.query.ReportQueryByCriteria;
+import org.apache.ojb.broker.util.SqlHelper;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -77,39 +81,114 @@
protected List appendListOfColumnsForSelect(ClassDescriptor cld, StringBuffer buf)
{
FieldDescriptor[] fieldDescriptors = getFieldsForSelect(cld);
- int fieldDescriptorLength = fieldDescriptors.length;
ArrayList columnList = new ArrayList();
- int i = 0;
- TableAlias alias = getSearchAlias();
-
- FieldDescriptor field;
- for (int j = 0; j < fieldDescriptorLength; j++)
+ TableAlias searchAlias = getSearchAlias();
+
+ for (int i = 0; i < fieldDescriptors.length; i++)
{
- field = fieldDescriptors[j];
+ FieldDescriptor field = fieldDescriptors[i];
+ TableAlias alias = getTableAliasForClassDescriptor(field.getClassDescriptor());
+ if (alias == null)
+ {
+ alias = searchAlias;
+ }
if (i > 0)
{
buf.append(",");
}
appendColumn(alias, field.getColumnName(), buf);
columnList.add(field.getAttributeName());
- i++;
}
+
+ appendClazzColumnForSelect(cld, buf);
return columnList;
}
/**
+ * Create the OJB_CLAZZ pseudo column based on CASE WHEN.
+ * This column defines the Class to be instantiated.
+ * @param cld
+ * @param buf
+ */
+ private void appendClazzColumnForSelect(ClassDescriptor cld, StringBuffer buf)
+ {
+ DescriptorRepository repository = cld.getRepository();
+ Class[] multiJoinedClasses = repository.getSubClassesMultipleJoinedTables(cld, true);
+
+ if (multiJoinedClasses.length == 0)
+ {
+ return;
+ }
+
+ buf.append(",CASE");
+
+ for (int i = multiJoinedClasses.length; i > 0; i--)
+ {
+ buf.append(" WHEN ");
+
+ ClassDescriptor subCld = repository.getDescriptorFor(multiJoinedClasses[i-1]);
+ FieldDescriptor[] fieldDescriptors = subCld.getPkFields();
+
+ TableAlias alias = getTableAliasForClassDescriptor(subCld);
+ for (int j = 0; j < fieldDescriptors.length; j++)
+ {
+ FieldDescriptor field = fieldDescriptors[j];
+ if (j > 0)
+ {
+ buf.append(" AND ");
+ }
+ appendColumn(alias, field.getColumnName(), buf);
+ buf.append(" IS NOT NULL");
+ }
+ buf.append(" THEN '" + subCld.getClassNameOfObject() + "'");
+ }
+ buf.append(" ELSE '" + cld.getClassNameOfObject() + "'");
+ buf.append(" END AS " + SqlHelper.OJB_CLASS_COLUMN);
+ }
+
+ /**
* Return the Fields to be selected.
*
- * MBAIRD: if the object being queried on has multiple classes mapped to the table,
- * then we will get all the fields that are a unique set across all those classes so if we need to
- * we can materialize an extent
- *
* @param cld the ClassDescriptor
* @return the Fields to be selected
*/
protected FieldDescriptor[] getFieldsForSelect(ClassDescriptor cld)
{
- return cld.getRepository().getFieldDescriptorsForMultiMappedTable(cld);
+ DescriptorRepository repository = cld.getRepository();
+ Set fields = new ListOrderedSet(); // keep the order of the fields
+
+ // add Standard Fields
+ // MBAIRD: if the object being queried on has multiple classes mapped to the table,
+ // then we will get all the fields that are a unique set across all those classes so if we need to
+ // we can materialize an extent
+ FieldDescriptor fds[] = repository.getFieldDescriptorsForMultiMappedTable(cld);
+ for (int i = 0; i < fds.length; i++)
+ {
+ fields.add(fds[i]);
+ }
+
+ // add inherited Fields. This is important when querying for a class having a super-reference
+ fds = cld.getFieldDescriptor(true);
+ for (int i = 0; i < fds.length; i++)
+ {
+ fields.add(fds[i]);
+ }
+
+ // add Fields of joined subclasses
+ Class[] multiJoinedClasses = repository.getSubClassesMultipleJoinedTables(cld, true);
+ for (int c = 0; c < multiJoinedClasses.length; c++)
+ {
+ ClassDescriptor subCld = repository.getDescriptorFor(multiJoinedClasses[c]);
+ fds = subCld.getFieldDescriptions();
+ for (int i = 0; i < fds.length; i++)
+ {
+ fields.add(fds[i]);
+ }
+ }
+
+ FieldDescriptor[] result = new FieldDescriptor[fields.size()];
+ fields.toArray(result);
+ return result;
}
/**
@@ -304,11 +383,8 @@
if (i > 0)
{
buf.append(",");
- }
-
+ }
appendColumn(cldSuper.getFullTableName(), field.getColumnName(), buf);
}
-
}
-
}
1.11 +25 -66 db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectByPkStatement.java
Index: SqlSelectByPkStatement.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlSelectByPkStatement.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SqlSelectByPkStatement.java 22 Nov 2004 20:55:23 -0000 1.10
+++ SqlSelectByPkStatement.java 18 Sep 2005 13:26:14 -0000 1.11
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-import java.util.ArrayList;
-import java.util.List;
-
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.metadata.FieldDescriptor;
import org.apache.ojb.broker.platforms.Platform;
+import org.apache.ojb.broker.query.Criteria;
+import org.apache.ojb.broker.query.Query;
+import org.apache.ojb.broker.query.QueryFactory;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -30,75 +30,34 @@
* @version $Id$
*/
-public class SqlSelectByPkStatement extends SqlPkStatement
+public class SqlSelectByPkStatement extends SqlSelectStatement
{
-
- /**
- * Constructor for SqlSelectByPkStatement.
- * @param aPlatform
- * @param aLogger
- * @param aCld
- */
- public SqlSelectByPkStatement(Platform aPlatform, Logger aLogger, ClassDescriptor aCld)
- {
- super(aPlatform, aLogger, aCld);
- }
-
/**
- * Appends to the statement a comma separated list of column names.
- *
- * MBAIRD: if the object being queried on has multiple classes mapped to the table,
- * then we will get all the fields that are a unique set across all those classes so if we need to
- * we can materialize an extent
- *
- * DO NOT use this if order of columns is important. The row readers build reflectively and look up
- * column names to find values, so this is safe. In the case of update, you CANNOT use this as the
- * order of columns is important.
- *
- * @return list of column names for the set of all unique columns for multiple classes mapped to the
- * same table.
+ * Constructor for SqlSelectByPkStatement.
+ * @param cld
+ * @param logger
*/
- protected List appendListOfColumnsForSelect(ClassDescriptor cld, StringBuffer buf)
- {
- FieldDescriptor[] fieldDescriptors = cld.getRepository().getFieldDescriptorsForMultiMappedTable(cld);
- ArrayList columnList = new ArrayList();
-
- if (fieldDescriptors != null)
- {
- int i = 0;
- int fieldDescriptorLength = fieldDescriptors.length;
- FieldDescriptor field = null;
-
- for (int j = 0; j < fieldDescriptorLength; j++)
- {
- field = fieldDescriptors[j];
- if (i > 0)
- {
- buf.append(",");
- }
- appendField(field, buf);
- columnList.add(field.getAttributeName());
- i++;
- }
- }
- return columnList;
+ public SqlSelectByPkStatement(Platform pf, Logger logger, ClassDescriptor cld)
+ {
+ super(pf, logger, cld, buildQuery(cld));
}
- /**
- * Answer the SELECT by primary key Sql for the Statement
+ /**
+ * Build a Pk-Query base on the ClassDescriptor.
+ * @param cld
+ * @return
*/
- public String getStatement()
+ private static Query buildQuery(ClassDescriptor cld)
{
- StringBuffer stmt = new StringBuffer(1024);
- ClassDescriptor cld = getClassDescriptor();
-
- stmt.append("SELECT ");
- appendListOfColumnsForSelect(cld, stmt);
- stmt.append(" FROM ");
- appendTable(cld, stmt);
- appendWhereClause(cld, false, stmt);
+ FieldDescriptor[] pkFields = cld.getPkFields();
+ Criteria crit = new Criteria();
- return stmt.toString();
+ for (int i = 0; i < pkFields.length; i++)
+ {
+ crit.addEqualTo(pkFields[i].getAttributeName(), null);
+ }
+ // TODO: should use broker.getQueryFactory().newQuery()
+ Query query = QueryFactory.newQuery(cld.getClassOfObject(), crit);
+ return query;
}
-
}
1.10 +54 -7 db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/TableAliasHandler.java
Index: TableAliasHandler.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/TableAliasHandler.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TableAliasHandler.java 27 Aug 2005 12:05:04 -0000 1.9
+++ TableAliasHandler.java 18 Sep 2005 13:26:14 -0000 1.10
@@ -103,6 +103,8 @@
// Walk the super reference-descriptor
buildSuperJoinTree(m_rootAlias, m_baseCld, "", false);
+ buildMultiJoinTree(m_rootAlias, m_baseCld, "", true);
+
// In some cases it is necessary to split the query criteria
// and then to generate UNION of several SELECTs
// We build the joinTreeToCriteria mapping,
@@ -235,9 +237,20 @@
}
/**
+ * Set the TableAlias for ClassDescriptor
+ */
+ private void setTableAliasForClassDescriptor(ClassDescriptor aCld, TableAlias anAlias)
+ {
+ if (m_cldToAlias.get(aCld) == null)
+ {
+ m_cldToAlias.put(aCld, anAlias);
+ }
+ }
+
+ /**
* Answer the TableAlias for ClassDescriptor
*/
- private TableAlias getTableAliasForClassDescriptor(ClassDescriptor aCld)
+ TableAlias getTableAliasForClassDescriptor(ClassDescriptor aCld)
{
return (TableAlias) m_cldToAlias.get(aCld);
}
@@ -689,17 +702,51 @@
SuperReferenceDescriptor srd = cld.getSuperReference();
if (srd != null)
{
+ ClassDescriptor superCld = cld.getRepository().getDescriptorFor(srd.getItemClassName());
FieldDescriptor[] leftFields = srd.getForeignKeyFieldDescriptors(cld);
- ClassDescriptor refCld = cld.getRepository().getDescriptorFor(srd.getItemClassName());
+ FieldDescriptor[] rightFields = srd.getForeignKeyTargetFieldDescriptors(superCld);
TableAlias base_alias = getTableAliasForPath(name, null);
String aliasName = String.valueOf(getAliasChar()) + m_aliasCount++;
- TableAlias right = new TableAlias(refCld, aliasName, false, null);
+ TableAlias right = new TableAlias(superCld, aliasName, false, null);
- Join join1to1 = new Join(left, leftFields, right, refCld.getPkFields(), useOuterJoin, "superClass");
+ Join join1to1 = new Join(left, leftFields, right, rightFields, useOuterJoin, "superClass");
base_alias.addJoin(join1to1);
- buildSuperJoinTree(right, refCld, name, useOuterJoin);
+ buildSuperJoinTree(right, superCld, name, useOuterJoin);
+ }
+ }
+
+ /**
+ * build the Join-Information for Subclasses having a super reference to this class
+ *
+ * @param left
+ * @param cld
+ * @param name
+ */
+ private void buildMultiJoinTree(TableAlias left, ClassDescriptor cld, String name, boolean useOuterJoin)
+ {
+ DescriptorRepository repository = cld.getRepository();
+ Class[] multiJoinedClasses = repository.getSubClassesMultipleJoinedTables(cld, false);
+
+ for (int i = 0; i < multiJoinedClasses.length; i++)
+ {
+ ClassDescriptor subCld = repository.getDescriptorFor(multiJoinedClasses[i]);
+ SuperReferenceDescriptor srd = subCld.getSuperReference();
+ if (srd != null)
+ {
+ FieldDescriptor[] leftFields = srd.getForeignKeyTargetFieldDescriptors(cld);
+ FieldDescriptor[] rightFields = srd.getForeignKeyFieldDescriptors(subCld);
+ TableAlias base_alias = getTableAliasForPath(name, null);
+
+ String aliasName = String.valueOf(getAliasChar()) + m_aliasCount++;
+ TableAlias right = new TableAlias(subCld, aliasName, false, null);
+
+ Join join1to1 = new Join(left, leftFields, right, rightFields, useOuterJoin, "subClass");
+ base_alias.addJoin(join1to1);
+
+ buildMultiJoinTree(right, subCld, name, useOuterJoin);
+ }
}
}
@@ -740,7 +787,7 @@
boolean useHintsOnExtents = false;
// BRJ: store alias map of in enclosing class
- TableAliasHandler.this.m_cldToAlias.put(aCld, this);
+ setTableAliasForClassDescriptor(aCld, this);
//LEANDRO: use hints
if (hints != null && hints.size() > 0)
1.38 +16 -12 db-ojb/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java
Index: RowReaderDefaultImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/RowReaderDefaultImpl.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- RowReaderDefaultImpl.java 3 Sep 2005 15:28:14 -0000 1.37
+++ RowReaderDefaultImpl.java 18 Sep 2005 13:26:14 -0000 1.38
@@ -31,6 +31,7 @@
import org.apache.ojb.broker.metadata.CreationParameter;
import org.apache.ojb.broker.metadata.FieldDescriptor;
import org.apache.ojb.broker.metadata.MetadataException;
+import org.apache.ojb.broker.util.SqlHelper;
/**
* Default implementation of the {@link RowReader} interface.
@@ -52,6 +53,7 @@
private static final Object[] NO_ARGS = {};
private ClassDescriptor classDescriptor;
+
/** The object factory to be used by this row reader for classes that require it */
private transient ObjectFactory factory;
@@ -119,7 +121,7 @@
protected Object buildOrRefreshObject(Map row, ClassDescriptor targetClassDescriptor, Object targetObject)
{
Object result = targetObject;
- FieldDescriptor[] fields = targetClassDescriptor.getFieldDescriptions();
+ FieldDescriptor[] fields = targetClassDescriptor.getFieldDescriptor(true);
FieldDescriptor fmd;
// 1. create new object instance if needed
@@ -177,13 +179,11 @@
if (creationDesc.hasParameters())
{
List params = creationDesc.getParameters();
-
args = new Object[params.size()];
for (int idx = 0; idx < args.length; idx++)
{
CreationParameter param = (CreationParameter)params.get(idx);
-
if (param.isConstantValue())
{
args[idx] = ConvertUtils.convert(param.getValue(), creationDesc.getParameterType(idx));
@@ -276,18 +276,22 @@
if(ojbDiscriminator != null)
{
ClassDescriptor cld = classDescriptor.getRepository().getDescriptorForDiscriminator(classDescriptor,ojbDiscriminator);
- fields = cld.getFieldDescriptions();
+ fields = cld.getFieldDescriptor(true);
row.put(OJB_DISCRIMINATOR_KEY, cld.getClassOfObject());
}
else
{
- // fields = classDescriptor.getRepository().getFieldDescriptorsForMultiMappedTable(classDescriptor);
- /*
- arminw:
- should be valid to use fields of class-descriptor, because we handle ojbDiscriminator
- above, so a multi mapped table class-descriptor will never be used here
- */
- fields = classDescriptor.getFieldDescriptions();
+ String ojbClass = SqlHelper.getOjbClassName(rs);
+ if (ojbClass != null)
+ {
+ ClassDescriptor cld = classDescriptor.getRepository().getDescriptorFor(ojbClass);
+ row.put(OJB_DISCRIMINATOR_KEY, cld.getClassOfObject());
+ fields = cld.getFieldDescriptor(true);
+ }
+ else
+ {
+ fields = classDescriptor.getFieldDescriptor(true);
+ }
}
}
readValuesFrom(rs, row, fields);
1.40 +13 -5 db-ojb/src/java/org/apache/ojb/broker/core/QueryReferenceBroker.java
Index: QueryReferenceBroker.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/QueryReferenceBroker.java,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- QueryReferenceBroker.java 27 Aug 2005 12:12:10 -0000 1.39
+++ QueryReferenceBroker.java 18 Sep 2005 13:26:15 -0000 1.40
@@ -43,6 +43,7 @@
import org.apache.ojb.broker.metadata.FieldDescriptor;
import org.apache.ojb.broker.metadata.FieldHelper;
import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
+import org.apache.ojb.broker.metadata.SuperReferenceDescriptor;
import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
@@ -277,6 +278,7 @@
}
catch (Throwable e)
{
+ e.printStackTrace();
throw new PersistenceBrokerException("Can't query for collection",e);
}
}
@@ -328,14 +330,13 @@
}
ObjectReferenceDescriptor ord = (ObjectReferenceDescriptor) key;
- RelationshipPrefetcher prefetcher;
- ArrayList owners = (ArrayList) entry.getValue();
-
- if (ord.isLazy() || (ord.getItemProxyClass() != null))
+ if (ord instanceof SuperReferenceDescriptor || ord.isLazy() || (ord.getItemProxyClass() != null))
{
continue;
}
+ RelationshipPrefetcher prefetcher;
+ ArrayList owners = (ArrayList) entry.getValue();
prefetcher = pb.getRelationshipPrefetcherFactory().createRelationshipPrefetcher(ord);
prefetcher.prefetchRelationship(owners);
it.remove();
@@ -373,6 +374,13 @@
else if ( pb.serviceSessionCache().lookup(id) != null )
{
refObj = pb.getObjectByIdentity(id);
+ if (rds.isSuperReferenceDescriptor())
+ {
+ // walk the super-references
+ ClassDescriptor superCld = cld.getRepository().getDescriptorFor(rds.getItemClass());
+ retrieveReferences(refObj, superCld, false);
+ retrieveCollections(refObj, superCld, false);
+ }
}
else if ((m_retrievalTasks != null)
&& !rds.isLazy()
1.28 +23 -1 db-ojb/src/java/org/apache/ojb/broker/util/SqlHelper.java
Index: SqlHelper.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/SqlHelper.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- SqlHelper.java 6 Sep 2005 22:19:20 -0000 1.27
+++ SqlHelper.java 18 Sep 2005 13:26:15 -0000 1.28
@@ -1,5 +1,7 @@
package org.apache.ojb.broker.util;
+import java.sql.ResultSet;
+import java.sql.SQLException;
import java.util.StringTokenizer;
/* Copyright 2002-2004 The Apache Software Foundation
@@ -31,6 +33,9 @@
/** do not try to reslve these. */
private static final String NO_ATTRIBUTES = "count,min,max,avg,sum,upper,lower,distinct,as";
+ /** define the name of the pseudo column holding the class to be instantiated. */
+ public static final String OJB_CLASS_COLUMN = "OJB_CLAZZ";
+
/**
* remove functions and () from path <br>
* ie: avg(amount) -> amount <br>
@@ -126,4 +131,21 @@
}
return true;
}
+
+ /**
+ * Returns the name of the class to be instantiated.
+ * @param rs the Resultset
+ * @return null if the column is not available
+ */
+ public static String getOjbClassName(ResultSet rs)
+ {
+ try
+ {
+ return rs.getString(OJB_CLASS_COLUMN);
+ }
+ catch (SQLException e)
+ {
+ return null;
+ }
+ }
}
1.65 +6 -1 db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java
Index: DescriptorRepository.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- DescriptorRepository.java 31 Aug 2005 17:38:51 -0000 1.64
+++ DescriptorRepository.java 18 Sep 2005 13:26:15 -0000 1.65
@@ -165,6 +165,11 @@
synchronized (extentTable)
{
ClassDescriptor cld = (ClassDescriptor) extentTable.get(clazz.getName());
+ if (cld == null)
+ {
+ // walk the super-references
+ cld = getDescriptorFor(clazz).getSuperClassDescriptor();
+ }
if (cld != null)
{
// fix by Mark Rowell
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org