Package org.nutz.dao.impl.link

Source Code of org.nutz.dao.impl.link.DoClearRelationByLinkedFieldLinkVisitor

package org.nutz.dao.impl.link;

import org.nutz.dao.entity.LinkField;
import org.nutz.dao.impl.AbstractLinkVisitor;
import org.nutz.dao.impl.entity.field.ManyManyLinkField;
import org.nutz.dao.sql.Pojo;
import org.nutz.dao.util.Pojos;
import org.nutz.lang.Each;
import org.nutz.lang.ExitLoop;
import org.nutz.lang.Lang;
import org.nutz.lang.LoopException;

/**
* 在中间表中,清除关于所有的链接对象的映射。
* <p>
* 即,如果 A-X, B-X, 因为链接对象是 X,它会将这两个关系都清除
*
* @author zozoh(zozohtnt@gmail.com)
*/
public class DoClearRelationByLinkedFieldLinkVisitor extends AbstractLinkVisitor {

  public void visit(Object obj, LinkField lnk) {
    if (lnk instanceof ManyManyLinkField) {
      final ManyManyLinkField mm = (ManyManyLinkField) lnk;
      Object value = mm.getValue(obj);
      if (Lang.length(value) == 0)
        return;

      final Pojo pojo = opt.maker().makeDelete(mm.getRelationName());
      pojo.append(Pojos.Items.cndColumn(mm.getToColumnName(), mm.getLinkedField(), null));

      Lang.each(value, new Each<Object>() {
        public void invoke(int i, Object ele, int length) throws ExitLoop, LoopException {
          pojo.addParamsBy(mm.getLinkedField().getValue(ele));
        }
      });

      opt.add(pojo);
    }
  }

}
TOP

Related Classes of org.nutz.dao.impl.link.DoClearRelationByLinkedFieldLinkVisitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.