Added dynamic column on linktable

This commit is contained in:
Ziver Koc 2010-09-07 19:14:13 +00:00
parent c0b6a8d479
commit 35c755e842
2 changed files with 20 additions and 8 deletions

View file

@ -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<DBBean> list = (List<DBBean>)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);

View file

@ -125,10 +125,15 @@ public class DBBeanSQLResultHandler<T> implements SQLResultHandler<T>{
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<? extends DBBean> list = DBConnection.exec(subStmt,
DBBeanSQLResultHandler.createList((Class<? extends DBBean>)field.getType(), db));
obj.setFieldValue(field, list);