package jef.database;
import java.util.List;
import jef.database.meta.ISelectProvider;
import jef.database.meta.Reference;
import jef.database.meta.ReferenceField;
import jef.database.meta.ReferenceObject;
import jef.tools.reflect.BeanWrapper;
public class ReverseReferenceProcessor {
List<Reference> refs;
//应该说只剩下一种关系,那就是 Nv1关系
public ReverseReferenceProcessor(List<Reference> reverse) {
this.refs=reverse;
}
//处理1vsN引用下的反向装填. 同时由于1vn下有可能反向的nv1是延迟加载的,此时还需要将延迟任务给取消掉。
public void process(Object obj, List<? extends IQueryableEntity> subs) {
for(Reference ref :refs){
for(ISelectProvider prov:ref.getAllRefFields()){
if(prov.isSingleColumn()){
ReferenceField r=(ReferenceField)prov;
Object value=r.getTargetField().getFieldAccessor().get(obj);
for(IQueryableEntity childObj:subs){
BeanWrapper child=BeanWrapper.wrap(childObj, BeanWrapper.FAST);
child.setPropertyValue(r.getName(), value);
}
}else{
ReferenceObject r=(ReferenceObject)prov;
for(IQueryableEntity childObj:subs){
BeanWrapper child=BeanWrapper.wrap(childObj, BeanWrapper.FAST);
child.setPropertyValue(r.getName(), obj);
}
}
}
}
}
}