java - 如何使用注释修复休眠?
问题描述
在测试期间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&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>
解决方案
我想你的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(); 之后你可以运行
推荐阅读
- python - Binance API get_symbol_ticker() 接受 1 个位置参数,但给出了 2 个
- spring - 在弹簧靴中找不到类型 .. 的属性 ..
- json - Flutter / Dart - 将 json 时间序列解析为带有键和值的映射
- angular - 当我使用 url 片段时防止滚动
- javascript - 当标记在 Leaflet markercluster 中聚集在一起时隐藏标记的功能
- c - 对于表达式 a+=b|=c,这个表达式将如何运行?
- javascript - 带有vue问题的递增和递减表单组件
- json - 接受来自请求 AKKA-HTTTP 的所有 JSON
- javascript - 如果没有正确回答,请重新发送问题
- excel - 为什么使用vba调用时应用程序窗口在打开后保持最小化?