Согласитесь с dfa, поэтому я рассматриваю прототип как класс, когда ни один из названных классов не найден
. Ниже приведена обновленная функция той, которую опубликовал Эли Грей, чтобы соответствовать моему образу ума
function what(obj){
if(typeof(obj)==="undefined")return "undefined";
if(obj===null)return "Null";
var res = Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1];
if(res==="Object"){
res = obj.constructor.name;
if(typeof(res)!='string' || res.length==0){
if(obj instanceof jQuery)return "jQuery";// jQuery build stranges Objects
if(obj instanceof Array)return "Array";// Array prototype is very sneaky
return "Object";
}
}
return res;
}
Благодаря @ M.Deinum
решение было немного больше.
Удалить классы Specification
& amp; TelefonbuchSpecifications
.
И просто вставьте TelefonbuchSpecifications
как вспомогательный класс в TelefonbuchRepository
public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>, JpaSpecificationExecutor<Telefonbuch> {
public class TelefonbuchSpecifications {
public static Specification<Telefonbuch> hasVorname(String vorname) {
return (root, query, cb) -> {
return cb.like(cb.lower(root.get(Telefonbuch_.vorname)), "%" + vorname.toLowerCase() + "%");
};
}
public static Specification<Telefonbuch> hasNachname(String nachname) {
return (root, query, cb) -> {
return cb.like(cb.lower(root.get(Telefonbuch_.nachname)), "%" + nachname.toLowerCase() + "%");
};
}
}
}
Для метода search
в SucheController
тогда:
List<Telefonbuch> list = telefonbuchRepository.findAll(TelefonbuchSpecifications.hasVorname(vorname));