package org.nutz.dao.impl.sql.pojo; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.nutz.dao.FieldFilter; import org.nutz.dao.entity.Entity; import org.nutz.dao.entity.LinkField; import org.nutz.dao.entity.LinkVisitor; import org.nutz.dao.pager.ResultSetLooping; import org.nutz.dao.sql.Pojo; import org.nutz.dao.sql.PojoCallback; import org.nutz.dao.sql.SqlContext; public class PojoQueryEntityByJoinCallback implements PojoCallback { protected String regex; public PojoQueryEntityByJoinCallback(String regex) { this.regex = regex; } public Object invoke(Connection conn, ResultSet rs, final Pojo pojo, Statement stmt) throws SQLException { ResultSetLooping ing = new ResultSetLooping() { protected boolean createObject(int index, final ResultSet rs, SqlContext context, int rowCount) { final Object mainObject = pojo.getEntity().getObject(rs, pojo.getContext().getFieldMatcher(), null); pojo.getEntity().visitOne(mainObject, regex, new LinkVisitor() { public void visit(Object obj, LinkField lnk) { Entity<?> en = lnk.getLinkedEntity(); String prefix = en.getTableName() + "_z_"; Object linkObject = en.getObject(rs, FieldFilter.get(en.getType()), prefix); lnk.setValue(mainObject, linkObject); } }); list.add(mainObject); return true; } }; ing.doLoop(rs, pojo.getContext()); return ing.getList(); } }