| Method from org.jboss.ejb.plugins.jaws.jdbc.JDBCPreloadFinderCommand Detail: |
protected void buildSQL() {
String sql = loadCommand.createSelectClause() + " "
+ finderDelegate.getFromClause() + " "
+ finderDelegate.getWhereClause() + " "
+ finderDelegate.getOrderByClause();
if (jawsEntity.hasRowLocking())
{
sql += " FOR UPDATE";
}
setSQL(sql);
}
Helper method called by the constructors |
protected Object createKey(ResultSet rs) throws Exception {
if (jawsEntity.hasCompositeKey())
{
// Compound key
try
{
Object pk = jawsEntity.getPrimaryKeyClass().newInstance();
int i = 1; // parameter index
Iterator it = jawsEntity.getPkFields();
while (it.hasNext())
{
PkFieldMetaData pkFieldMetaData = (PkFieldMetaData)it.next();
Field pkField = pkFieldMetaData.getPkField();
String colName = pkFieldMetaData.getColumnName();
pkField.set(pk, getResultObject(rs,
i++,
pkField.getType()));
}
return pk;
} catch (Exception e)
{
return null;
}
} else
{
// Primitive key
Iterator it = jawsEntity.getPkFields();
PkFieldMetaData pkFieldMetaData = (PkFieldMetaData)it.next();
return getResultObject(rs, 1, pkFieldMetaData.getCMPField().getType());
}
}
|
public String getFromClause() {
return finderDelegate.getFromClause();
}
|
public String getOrderByClause() {
return finderDelegate.getOrderByClause();
}
|
public String getWhereClause() {
return finderDelegate.getWhereClause();
}
|
protected Object handleResult(ResultSet rs,
Object argOrArgs) throws Exception {
Collection result = new ArrayList();
while (rs.next())
{
Object key = createKey(rs);
result.add(key);
preloadOneEntity(rs, key);
}
return result;
}
|
protected void preloadOneEntity(ResultSet rs,
Object key) {
if (log.isDebugEnabled())
log.debug("PRELOAD: preloading entity "+key);
int idx = 1;
// skip the PK fields at the beginning of the select.
Iterator keyIt = jawsEntity.getPkFields();
while (keyIt.hasNext()) {
keyIt.next();
idx++;
}
int fieldCount = 0;
Object[] allValues = new Object[jawsEntity.getNumberOfCMPFields()];
Iterator iter = jawsEntity.getCMPFields();
try {
while (iter.hasNext())
{
CMPFieldMetaData cmpField = (CMPFieldMetaData)iter.next();
Object value = getResultObject(rs, loadCommand.cmpFieldPositionInSelect[fieldCount], cmpField);
allValues[fieldCount] = value;
fieldCount++;
}
if (log.isDebugEnabled())
log.debug("adding to preload data: " + key.toString());
factory.addPreloadData(key, allValues);
} catch (Exception sqle) {
log.warn("SQL Error preloading data for key "+key, sqle);
}
}
|
protected void setParameters(PreparedStatement stmt,
Object argOrArgs) throws Exception {
finderDelegate.setParameters(stmt, argOrArgs);
/*
Object[] args = (Object[])argOrArgs;
TypeMappingMetaData typeMapping = jawsEntity.getJawsApplication().getTypeMapping();
for (int i = 0; i < defined.getParameterArray().length; i++)
{
Object arg = args[defined.getParameterArray()[i]];
int jdbcType = typeMapping.getJdbcTypeForJavaType(arg.getClass());
setParameter(stmt,i+1,jdbcType,arg);
}
*/
}
|