使用HQL从数据库获取数据 [英] Getting data from database using HQL
本文介绍了使用HQL从数据库获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
你好, 我有3个表的数据库Staff:
Hi, I have database Staff with 3 tables:
mysql> describe person;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| person_id | bigint(20) | NO | PRI | NULL | auto_increment |
| date | datetime | YES | | NULL | |
| first_name | varchar(255) | YES | | NULL | |
| last_name | varchar(255) | YES | | NULL | |
| position | varchar(255) | YES | | NULL | |
| salary | double | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
mysql> describe department;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| department_id | bigint(20) | NO | PRI | NULL | auto_increment |
| dept_name | varchar(255) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
mysql> describe department_person;
+---------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+-------+
| department_id | bigint(20) | NO | PRI | NULL | |
| person_id | bigint(20) | NO | PRI | NULL | |
+---------------+------------+------+-----+---------+-------+
因此,我想编写HQL语句,以便使用person.lastName从person.position获取数据,并且我使用以下代码提取了这些数据,但没有运气:
So, I want to compose HQL statement for getting data from person.position using person.lastName and I've used the following code to exctract this data but without luck:
public List<Person> findPosition(){
Session session =
HiberUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Person> result = session.createQuery("select position from Person p where p.lastName= 'Anderson'").list();
for(Person a : result) {
Hibernate.initialize(a.getDepartmentList());
}
session.getTransaction().commit();
return result;
}
这是向我展示此异常的地方:
In this was it shows me this exception:
Hibernate: select person0_.position as col_0_0_ from person person0_ where person0_.last_name='Anderson'
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to main.Person
at main.StaffDAO.findPosition(StaffDAO.java:100)
at main.Main.main(Main.java:37)
您能帮我撰写正确的HQL声明吗?
Can you please help me in composing correct HQL statement?
推荐答案
List<Person> result = session.createQuery("select position from Person p where p.lastName= 'Anderson'").list();
您正在选择一个包含VARCHAR(255)的属性,但希望它以List<Person>
的形式返回.那根本无法计算.
You are selecting an attribute that holds a VARCHAR(255) but expect it returned as a List<Person>
. That simply does not compute.
你可以做
List<Person> result = session.createQuery("select p from Person p where p.lastName= 'Anderson'").list();
这篇关于使用HQL从数据库获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文