From 35c755e842eebafa092b0131ed55064eb24cd58a Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Tue, 7 Sep 2010 19:14:13 +0000 Subject: [PATCH] Added dynamic column on linktable --- src/zutil/db/bean/DBBean.java | 19 +++++++++++++------ src/zutil/db/bean/DBBeanSQLResultHandler.java | 9 +++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/zutil/db/bean/DBBean.java b/src/zutil/db/bean/DBBean.java index 379c43f..7ce67ac 100644 --- a/src/zutil/db/bean/DBBean.java +++ b/src/zutil/db/bean/DBBean.java @@ -54,7 +54,10 @@ public abstract class DBBean { @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface DBLinkTable { - String value(); + /** The name of the Link table */ + String name(); + /** The name of the column that contains this objects id */ + String column() default ""; } /** @@ -177,17 +180,21 @@ public abstract class DBBean { else if( List.class.isAssignableFrom( field.getType() ) && field.getAnnotation( DBLinkTable.class ) != null){ List list = (List)field.get(this); - String subtable = field.getAnnotation( DBLinkTable.class ).value().replace("\"", ""); + DBLinkTable linkTable = field.getAnnotation( DBLinkTable.class ); + String subtable = linkTable.name(); + String idcol = (linkTable.column().isEmpty() ? config.tableName : linkTable.column() ); DBBeanConfig subConfig = null; for(DBBean subobj : list){ if(subConfig == null) subConfig = beanConfigs.get( subobj.getClass() ); // Save links in link table - PreparedStatement subStmt = sql.getPreparedStatement("REPLACE INTO \""+subtable+"\" "+config.tableName+"=? ?=?"); - subStmt.setObject(1, config.id_field); - subStmt.setString(2, subConfig.tableName); - subStmt.setObject(3, subConfig.id_field.get(subobj)); + PreparedStatement subStmt = sql.getPreparedStatement("REPLACE INTO ? ?=? ?=?"); + subStmt.setString(1, subtable); + subStmt.setString(2, idcol); + subStmt.setObject(3, config.id_field); + subStmt.setString(4, subConfig.tableName); + subStmt.setObject(5, subConfig.id_field.get(subobj)); DBConnection.exec(subStmt); // Save the sub bean subobj.save(sql); diff --git a/src/zutil/db/bean/DBBeanSQLResultHandler.java b/src/zutil/db/bean/DBBeanSQLResultHandler.java index 4eb3b12..4b9089b 100644 --- a/src/zutil/db/bean/DBBeanSQLResultHandler.java +++ b/src/zutil/db/bean/DBBeanSQLResultHandler.java @@ -125,10 +125,15 @@ public class DBBeanSQLResultHandler implements SQLResultHandler{ else if( List.class.isAssignableFrom( field.getType() ) && field.getAnnotation( DBLinkTable.class ) != null){ if(db != null){ - String subtable = field.getAnnotation( DBLinkTable.class ).value().replace("\"", ""); + DBLinkTable linkTable = field.getAnnotation( DBLinkTable.class ); + String subtable = linkTable.name(); + String idcol = (linkTable.column().isEmpty() ? bean_config.tableName : linkTable.column() ); // Load list from link table - PreparedStatement subStmt = db.getPreparedStatement("SELECT * FROM \""+subtable+"\" WHERE ?=?"); + PreparedStatement subStmt = db.getPreparedStatement("SELECT * FROM ? WHERE ?=?"); + subStmt.setString(1, subtable); + subStmt.setString(2, idcol); + subStmt.setObject(3, bean_config.id_field.get( obj )); List list = DBConnection.exec(subStmt, DBBeanSQLResultHandler.createList((Class)field.getType(), db)); obj.setFieldValue(field, list);