当前位置: 首页 > 知识库问答 >
问题:

Spring InvalidDataAccessApiUsageException:参数值元素与预期类型不匹配

巩子实
2023-03-14

我已经回答了这个问题,但没有得到任何反馈。因此,我将尝试提出不同的问题。我想对我的搜索请求使用规范。但似乎无法访问规范或其他内容,因为它告诉我:

javax.el.ELException: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [com.auth0.samples.bootfaces.TelefonbuchSpecifications$1@20079547] did not match expected type [java.lang.String (n/a)];

这个:[com.auth0.samples.bootfaces.Telefonbuch规范$1@20079547]带有@...似乎不对。

我只是试着遵循这个Spring官方教程:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ 或者来自DZone的是相同的https://dzone.com/articles/using-spring-data-jpa-specification

我的班级:

public interface TelefonbuchRepository extends JpaRepository<Telefonbuch, Long>, JpaSpecificationExecutor<Telefonbuch> {

    public List<Telefonbuch> findByVornameOrNachname(String vorname, String nachname);
    public List<Telefonbuch> findByVorname(Specification<Telefonbuch> spec);
}

Telefonbuch规格:

public class TelefonbuchSpecifications implements Specification<Telefonbuch> { //implements was a try

    public static Specification<Telefonbuch> hasVorname(String vorname) {
        return (root, query, cb) -> {
            //return cb.equal(root.get(Telefonbuch_.vorname), "%"+vorname.toLowerCase()+"%");
            Predicate equalPredicate = cb.like(cb.lower(root.get(Telefonbuch_.vorname)), "%"+vorname.toLowerCase()+"%");
            return equalPredicate;
        };
    }

    @Override
    public Predicate toPredicate(Root<Telefonbuch> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
        // TODO Auto-generated method stub
        return null;
    }

SearchController中的html" target="_blank">方法:

 public void search(String vorname, String nachname, String telefonnummer, String handynummer) {  
List<Telefonbuch> list = telefonbuchRepository.findByVorname(TelefonbuchSpecifications.hasVorname(vorname));

共有1个答案

隆谦
2023-03-14

感谢@M.Deinum

解决方案要大一点。

删除类规范

并且只需在TelefonbuchRepository中插入Telefonbuch规范作为帮助类

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() + "%");
            };
        }

    }
}

对于方法控件中搜索,然后:

List<Telefonbuch> list = telefonbuchRepository.findAll(TelefonbuchSpecifications.hasVorname(vorname));

 类似资料:
  • 我生活在一场噩梦中,这是一场依赖性的噩梦;) 我正在测试一个使用Hibernate3的EJB应用程序。 我可以部署它: > 作为部署到嵌入式JBOSS 7()的Arquillian测试(EJB作为封装在EAR中的JAR)。它在那里不起作用。我尝试过各种依赖项集,但这是我确定需要的最小依赖项集:

  • 我正在尝试使用Spring数据执行一个IN查询。我的模型如下所示: 我的仓库界面是这样的: } 问题是当我尝试执行此代码

  • 我使用的是JPA2.0,在DAO层中有以下代码: 注意:这是从泛型例程中提取和简化的代码,我不能将“Object ValueArr”更改为String[],因为它被用于其他...

  • 我生活在一个噩梦中,而且是一个依赖的噩梦;) 我正在测试一个使用Hibernate3的EJB应用程序。 > 在WebSphere8上(EAR中内置的EJB JAR),这是我想要的目标环境。在那里很好用。按照我们组织的标准,(Hibernate)依赖关系是通过一个单独的过程来处理的。我似乎在那里获得了以下Hibernate依赖项: * * * * * * * * * 作为部署到嵌入式JBoss7()

  • 它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。

  • 何时调用Spring数据JPA方法将引发如下所示的异常 原因:java.lang.IllegalArgumentException:参数值元素[ApplicationMaterial(ID=1,Name=SDFSF,FileFormat=Doc,Description=DFSDFDS,TemplateFileURL=FSDFSDF,CreateDat=2018-09-26 16:54:09.297