java.lang.IllegalArgumentException: org.hibernate.QueryException: Legacy-style query parameters (`?`

这篇博客介绍了在使用Java Persistence API (JPA) 进行条件查询时遇到的IllegalArgumentException,问题源于旧式的查询参数风格不再被支持。通过将查询语句中的问号(? )替换为带索引的问号(?1),成功解决了报错。修复后的代码示例展示了如何正确地在JPA查询中使用参数占位符进行模糊查询。
摘要由CSDN通过智能技术生成

java.lang.IllegalArgumentException: org.hibernate.QueryException: Legacy-style query parameters (?) are no longer supported; use JPA-style ordinal parameters (e.g., ?1) instead : from jpa.domain.Customer where cust_name like ? [from jpa.domain.Customer where cust_name like ? ]
是不是很懵逼,代码一字不差,就是报错,是因为版本的问题,高版本条件查询语句变了,应该改为String jpql= "from Customer where cust_name like ?1 ";
原语句:

 /**
     * 测试jqpl条件查询:模糊查询
     * sql:select * from jpa_customer where name like ?
     * jqpl: from Customer where cust_name like ?
     *
     */
    @Test
    public void testjqpllike(){
        //2.通过管理类工厂获取实体管理器
        EntityManager manager = JpaUtils.getEntityManager();
        //3.获取事务对象,开启事务
        EntityTransaction tx = manager.getTransaction();//获取事务对象
        tx.begin();
        //4.完成增删改查-查询 count(*)报红,但不影响
        String jpql= "from Customer where cust_name like ? ";
        Query query = manager.createQuery(jpql);//常见Query对象,query对象才是执行jqpl的对象

        //对参数进行赋值-占位符参数
        //第一个参数是索引,第二个是取值(索引从1开始)

        query.setParameter(1,"王%");

        //发送查询,封装结果集
        List resultList = query.getResultList();
        for (Object o : resultList) {
            System.out.println(o);
        }

        //5.提交事务(回滚事务)
        tx.commit();
        //6.释放资源
        manager.close();
    }

修改后为,注意看查询语句,在?后加了个1。

/**
     * 测试jqpl条件查询:模糊查询
     * sql:select * from jpa_customer where name like ?
     * jqpl: from Customer where cust_name like ?
     *
     */
    @Test
    public void testjqpllike(){
        //2.通过管理类工厂获取实体管理器
        EntityManager manager = JpaUtils.getEntityManager();
        //3.获取事务对象,开启事务
        EntityTransaction tx = manager.getTransaction();//获取事务对象
        tx.begin();
        //4.完成增删改查-查询 
        String jpql= "from Customer where cust_name like ?1 ";
        Query query = manager.createQuery(jpql);//常见Query对象,query对象才是执行jqpl的对象

        //对参数进行赋值-占位符参数
        //第一个参数是索引,第二个是取值(索引从1开始)

        query.setParameter(1,"王%");

        //发送查询,封装结果集
        List resultList = query.getResultList();
        for (Object o : resultList) {
            System.out.println(o);
        }

        //5.提交事务(回滚事务)
        tx.commit();
        //6.释放资源
        manager.close();
    }

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值