java - Hibernate 抛出 java.lang.NoSuchMethodError : org. hibernate.Session.createQuery

标签 java hibernate hql

我是 hibernate 新手,我正在尝试使用 Eclipse IDE 编写 hibernate HQL 程序,当我尝试使用“HQL From”时,hibernate 会抛出错误,指出没有 CreateQuery() 方法。我尝试导入 org.hibernate.query.Query 这似乎也不起作用。

我收到以下错误,

        Apr 04, 2018 12:01:26 PM org.hibernate.Version logVersion
    INFO: HHH000412: Hibernate Core {5.2.11.Final}
    Apr 04, 2018 12:01:26 PM org.hibernate.cfg.Environment <clinit>
    INFO: HHH000206: hibernate.properties not found
    Hibernate Configuration loaded
    Hibernate serviceRegistry created
    Apr 04, 2018 12:01:28 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
    INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
    Apr 04, 2018 12:01:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
    WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
    Apr 04, 2018 12:01:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/crud]
    Apr 04, 2018 12:01:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH10001001: Connection properties: {user=root, password=****}
    Apr 04, 2018 12:01:28 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
    INFO: HHH10001003: Autocommit mode: false
    Apr 04, 2018 12:01:28 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
    INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
    Apr 04, 2018 12:01:28 PM org.hibernate.dialect.Dialect <init>
    INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
    Apr 04, 2018 12:01:29 PM org.hibernate.search.engine.Version <clinit>
    INFO: HSEARCH000034: Hibernate Search 5.8.0.Final
    Hibernate session factory created
    Beginning transaction.
    Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.Session.createQuery(Ljava/lang/String;)Lorg/hibernate/Query;
        at com.crud.HQLExamples.main(HQLExamples.java:31)

主类如下所示

    //------HQLExamples.java--------------

package com.crud;

import java.util.*;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.crud.Employee;
import com.crud.HibernateUtil;

public class HQLExamples 
{

    @SuppressWarnings({ "unchecked"})
    public static void main(String[] args) 
    {

        //Prep work
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.getCurrentSession();

        //HQL example - Get All Employees
        Transaction tx = session.beginTransaction();
        System.out.println("Beginning transaction.");

        Query query = session.createQuery("from Employee"); 
        List<Employee> empList = query.list();
        for(Employee emp : empList)
        {
            System.out.println("List of Employees::"+emp.getId()+","+emp.getAddress().getCity());
        }

        //HQL example - Get Employee with id
        query = session.createQuery("from Employee where id= :id");
        query.setLong("id", 3);
        Employee emp = (Employee) query.uniqueResult();
        System.out.println("Employee Name="+emp.getName()+", City="+emp.getAddress().getCity());

        //HQL pagination example
        query = session.createQuery("from Employee");
        query.setFirstResult(0); //starts with 0
        query.setFetchSize(2);
        empList = query.list();
        for(Employee emp4 : empList)
        {
            System.out.println("Paginated Employees::"+emp4.getId()+","+emp4.getAddress().getCity());
        }

        //HQL Update Employee
        query = session.createQuery("update Employee set name= :name where id= :id");
        query.setParameter("name", "Pankaj Kumar");
        query.setLong("id", 1);
        int result = query.executeUpdate();
        System.out.println("Employee Update Status="+result);

        //HQL Delete Employee, we need to take care of foreign key constraints too
        query = session.createQuery("delete from Address where id= :id");
        query.setLong("id", 4);
        result = query.executeUpdate();
        System.out.println("Address Delete Status="+result);

        query = session.createQuery("delete from Employee where id= :id");
        query.setLong("id", 4);
        result = query.executeUpdate();
        System.out.println("Employee Delete Status="+result);

        //HQL Aggregate function examples
        query = session.createQuery("select sum(salary) from Employee");
        double sumSalary = (Double) query.uniqueResult();
        System.out.println("Sum of all Salaries= "+sumSalary);

        //HQL join examples
        query = session.createQuery("select e.name, a.city from Employee e "
                + "INNER JOIN e.address a");
        List<Object[]> list = query.list();
        for(Object[] arr : list)
        {
            System.out.println(Arrays.toString(arr));
        }

        //HQL group by and like example
        query = session.createQuery("select e.name, sum(e.salary), count(e)"
                + " from Employee e where e.name like '%i%' group by e.name");
        List<Object[]> groupList = query.list();
        for(Object[] arr : groupList)
        {
            System.out.println(Arrays.toString(arr));
        }

        //HQL order by example
        query = session.createQuery("from Employee e order by e.id desc");
        empList = query.list();
        for(Employee emp3 : empList)
        {
            System.out.println("ID Desc Order Employee::"+emp3.getId()+","+emp3.getAddress().getCity());
        }

        //rolling back to save the test data
        tx.rollback();

        //closing hibernate resources
        sessionFactory.close();
    }

}

pom.xml 看起来像这样

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.crud</groupId>
  <artifactId>HQLExample</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.0.5</version>
        </dependency>

  </dependencies>
</project>

谢谢

最佳答案

如果您使用 Hibernate 5.2 及更高版本,您应该使用 Query<> 方法(org.hibernate.query.Query 包),那么它将完美地工作。

关于java - Hibernate 抛出 java.lang.NoSuchMethodError : org. hibernate.Session.createQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49644526/

相关文章:

java - 为什么我收到错误语法错误?

java - org.springframework.beans.factory.BeanCreationException : NoClassDefFoundError: Could not initialize class org. hibernate.ann

hibernate - 如果我学习 NHibernate,我会知道 Hibernate 吗? Spring.net 和 (Java) Spring 怎么样?

sql - 使用 HQL 在 from 子句中进行子查询

java - 从简单的 HQL 查询中获取无效参数索引 1

java - 关于 Android TV 中的 EPG 数据

Java 扫描仪找不到下一行?

java - 如何在给定开始和结束 IP 地址的情况下生成 IP 地址范围?

java - Hibernate子表不更新

grails - 如何在HQL/GORM中表达 "where value is in dynamic list"?