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