簡體   English   中英

休眠提示 java.lang.NoSuchMethodError: org.hibernate.Session.createQuery

[英]Hibernate thows java.lang.NoSuchMethodError: org.hibernate.Session.createQuery

我是 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 包),那么它將完美地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM