package net.csdn.validate.impl; import net.csdn.jpa.model.JPQL; import net.csdn.validate.BaseValidateParse; import net.csdn.validate.ValidateHelper; import net.csdn.validate.ValidateResult; import java.lang.reflect.Field; import java.util.List; import java.util.Map; import static net.csdn.common.collections.WowCollections.map; /** * BlogInfo: WilliamZhu * Date: 12-7-4 * Time: 上午7:10 */ public class Uniqueness extends BaseValidateParse { private static String notice = "{} is not uniq"; @Override public void parse(final Object target, final List<ValidateResult> validateResultList) { try { final Class clzz = target.getClass(); iterateValidateInfo(clzz, ValidateHelper.uniqueness, new ValidateIterator() { @Override public void iterate(String targetFieldName, Field field, Object info) throws Exception { String msg = notice; if (info instanceof Map) msg = messageWithDefault((Map) info, notice); Field tempField = clzz.getDeclaredField(targetFieldName); tempField.setAccessible(true); Object value = tempField.get(target); String whereCondition = targetFieldName + "=:hold"; List models = ((JPQL) clzz.getDeclaredMethod("where", String.class, Map.class).invoke(null, whereCondition, map("hold", value))).fetch(); if (models.size() > 0) { validateResultList.add(validateResult(msg, targetFieldName)); } } }); } catch (Exception e) { e.printStackTrace(); } } }