首页 > 解决方案 > 如何使用注释修复休眠?

问题描述

在测试期间CRUD,我使用createQuery()方法生成HQL查询以从数据库返回数据MySQL。我的代码带有错误消息的下划线:

无法解析符号“学生”此检查控制是否对 Persistence QL 查询进行错误检查

@Entity在我看来,数据库模型类中的注释存在一些问题。

学生.java

import javax.persistence.*;

@Entity
@Table(name="student")
public class Student {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;

    @Column(name="email")
    private String email;

    public Student() {

    }



QueryStudentDemo.java

    public class QueryStudentDemo {
    public static void main(String[] args) {

        //create session factory
        SessionFactory factory = new Configuration()
                                    .configure("hibernate.cfg.xml")
                                    .addAnnotatedClass(Student.class)
                                    .buildSessionFactory();

        //create session
        Session session = factory.getCurrentSession();

        try{

            //use the session object to save Java object


            //begin the transaction
            session.beginTransaction();

            //query students
            List<Student> studentList = session.createQuery("from Student").getResultList();


            //display the students
            for (Student student: studentList){
                System.out.println("Student: " + student);
            }

            //commit transaction
            session.getTransaction().commit();

            System.out.println("Transaction done!");


        }finally {
            factory.close();
        }

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false&amp;serverTimezone=UTC</property>
        <property name="connection.username">hbstudent</property>
        <property name="connection.password">hbstudent</property>

        <!-- JDBC connection pool settings ... using built-in test pool -->
        <property name="connection.pool_size">1</property>

        <!-- Select our SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>

        <!-- Echo the SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Set the current session context -->
        <property name="current_session_context_class">thread</property>


    </session-factory>

</hibernate-configuration>

标签: javahibernate

解决方案


我想你的hibernate.cfg.xml失踪<mapping class="your classname" />

-首先在学生类中更改您的表名,将 @Table(name="student") 替换为 @Table(name="Student")

  • 第二次使用 Session session = factory.openSession(); 这个而不是 Session session = factory.getCurrentSession();

  • List studentList = session.createQuery("from Student").getResultList(); 将其替换为

查询查询 = session.createQuery(s); 列出 studentList = query.list(); 之后你可以运行


推荐阅读