From 9f3c8a886e2e97fdf53aa2455192cfd990a7b457 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Tue, 9 Nov 2010 18:58:52 +0000 Subject: [PATCH] Bug Fix :D --- src/zutil/db/bean/DBBean.java | 8 ++++---- src/zutil/db/bean/DBBeanSQLResultHandler.java | 20 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/zutil/db/bean/DBBean.java b/src/zutil/db/bean/DBBean.java index 17ee764..279184a 100644 --- a/src/zutil/db/bean/DBBean.java +++ b/src/zutil/db/bean/DBBean.java @@ -63,12 +63,12 @@ public abstract class DBBean { @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface DBLinkTable { - /** The name of the Link table */ + /** The name of the Link table, should not contain any strange characters or spaces */ String name(); /** The class of the linked bean */ Class beanClass(); - /** The name of the column that contains this objects id */ - String column() default ""; + /** The name of the column that contains the main objects id */ + String idColumn() default ""; } /** @@ -231,7 +231,7 @@ public abstract class DBBean { if( list != null ){ DBLinkTable linkTable = field.getAnnotation( DBLinkTable.class ); String subtable = linkTable.name(); - String idcol = (linkTable.column().isEmpty() ? config.tableName : linkTable.column() ); + String idcol = (linkTable.idColumn().isEmpty() ? config.tableName : linkTable.idColumn() ); String sub_idcol = "id"; DBBeanConfig subConfig = null; diff --git a/src/zutil/db/bean/DBBeanSQLResultHandler.java b/src/zutil/db/bean/DBBeanSQLResultHandler.java index da9569d..54d7386 100644 --- a/src/zutil/db/bean/DBBeanSQLResultHandler.java +++ b/src/zutil/db/bean/DBBeanSQLResultHandler.java @@ -135,7 +135,7 @@ public class DBBeanSQLResultHandler implements SQLResultHandler{ obj = bean_class.newInstance(); cacheDBBean(obj, id); - // Get id field + // Set id field obj.id = id; // Get the rest for( Field field : bean_config.fields ){ @@ -144,7 +144,7 @@ public class DBBeanSQLResultHandler implements SQLResultHandler{ // Another DBBean class if( DBBean.class.isAssignableFrom( field.getType() )){ if(db != null){ - Object subid = result.getObject(name); + Long subid = result.getLong( name ); DBBean subobj = getCachedDBBean(field.getType(), subid); if( subobj == null ) subobj = DBBean.load(db, (Class)field.getType(), subid); @@ -156,15 +156,17 @@ public class DBBeanSQLResultHandler implements SQLResultHandler{ field.getAnnotation( DBLinkTable.class ) != null){ if(db != null){ DBLinkTable linkTable = field.getAnnotation( DBLinkTable.class ); - String subtable = linkTable.name(); - String idcol = (linkTable.column().isEmpty() ? bean_config.tableName : linkTable.column() ); + DBBeanConfig subConfig = DBBean.getBeanConfig( linkTable.beanClass() ); + String linkTableName = linkTable.name(); + String subTable = subConfig.tableName; + String idcol = (linkTable.idColumn().isEmpty() ? bean_config.tableName : linkTable.idColumn() ); // Load list from link table - String subsql = "SELECT * FROM "+subtable+" WHERE ?=?"; + //String subsql = "SELECT * FROM "+linkTableName+" NATURAL JOIN "+subConfig.tableName+" WHERE "+idcol+"=?"; + String subsql = "SELECT obj.* FROM "+linkTableName+" as link, "+subTable+" as obj WHERE obj."+idcol+"=? AND obj.id=link.id"; logger.finest("List Load Query: "+subsql); PreparedStatement subStmt = db.getPreparedStatement( subsql ); - subStmt.setString(1, idcol); - subStmt.setObject(2, obj.getId() ); + subStmt.setObject(1, obj.getId() ); List list = DBConnection.exec(subStmt, DBBeanSQLResultHandler.createList(linkTable.beanClass(), db)); obj.setFieldValue(field, list); @@ -176,9 +178,7 @@ public class DBBeanSQLResultHandler implements SQLResultHandler{ } return obj; - } catch (InstantiationException e) { - throw new SQLException(e); - } catch (IllegalAccessException e) { + } catch (Exception e) { throw new SQLException(e); } }