я обновляю свой старый проект до весны JPA данных, так что в моем старом проекте я проверка уникальный поданное значение в дБ, как нижеSpring Data JPA уникальные критерии
@Override
public <K extends AbstractDomainObject> boolean isUnique(Class<K> clazz, Map<String, Object> properties) {
StringBuffer stringBuffer = new StringBuffer("select count(obj) from "+ clazz.getSimpleName() +" obj where 1=1");
Iterator<String> iterator = properties.keySet().iterator();
logger.info("EntrySet: " + properties.entrySet());
while(iterator.hasNext()) {
String key = iterator.next();
stringBuffer.append(" and ");
stringBuffer.append("obj."+key+"='"+properties.get(key)+"'");
}
Query query = entityManager.createQuery(stringBuffer.toString());
Long resultCount = (Long) query.getSingleResult();
logger.info("### Result Count for isUnique: " + resultCount);
return ((int)(resultCount == null?0:resultCount)) <= 0;
}
этот код работает идеально, как мог я преобразовать это в JPA Spring Data,
я передаю значения, как это у меня есть Sevice и реализация
public class CountryService {
public boolean isUnique(Country country, Map<String, Object> params);
}
public class CountryServiceImpl{
@Autowire
GenericDAO genericDAO;
@Override
public boolean isUnique(Country country, Map<String, Object> params){
genericDAO.isUnique(country, params);
}
}
In My Co ntroller
@Controller
@RequestMappin("/country")
public class CountryController{
@Autowire
CountryService countryService;
@ReqeustMapping("/unique")
public String checkUnique(@ModelAttribute("country")Country country, ModelMap modelMap, HttpServletRequest request){
Map<String, Object> params = new HashMap<String, Object>();
params.put("code", country.getCode());
params.put("name", country.getName());
countryService.isUnique(Country.class,
}
}
выше код прекрасно, этим мне нужно использовать спецификации весны JPA в моем genericDAO, я думаю, с помощью предиката в jpaspecification, пожалуйста, помогите мне здесь, ниже код догадки я думаю
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<K> query = builder.createQuery(clazz);
Root<K> root = query.from(clazz);
return entityManager.createQuery(query.select(root)).getResultList();
нужна экспертная оценка здесь plz – pradeep