【问题标题】:Getting data from database using HQL使用 HQL 从数据库中获取数据
【发布时间】:2013-04-15 19:55:13
【问题描述】:

你好, 我有 3 个表的数据库员工:

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 获取数据,并且我使用以下代码来提取这些数据,但没有运气:

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;

    }

在这就是它向我展示了这个异常:

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 语句吗?

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:
    List<Person> result = session.createQuery("select position from Person p where p.lastName= 'Anderson'").list();
    

    您正在选择一个包含 VARCHAR(255) 的属性,但希望它以 List&lt;Person&gt; 的形式返回。这根本不计算。

    你可以的

    List<Person> result = session.createQuery("select p from Person p where p.lastName= 'Anderson'").list();
    

    【讨论】:

      【解决方案2】:

      好吧,您在查询中选择了position,并尝试将其放入人员列表中。相反,您应该select p from Person p where p.lastName= 'Anderson'

      【讨论】:

        【解决方案3】:

        从人 p 中选择人,其中 p.lastName= 'Anderson'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-10
          • 1970-01-01
          • 2012-12-14
          • 2012-03-04
          • 2016-11-21
          • 2014-04-10
          • 2016-05-01
          • 1970-01-01
          相关资源
          最近更新 更多