具有表和实体映射的休眠查询异常

时间:2020-04-26 19:40:58

标签: java spring hibernate spring-boot hql

我收到错误消息,例如:

org.hibernate.hql.internal.ast.QuerySyntaxException: Employee is not mapped [from Employee]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Employee is not mapped [from Employee]",
    "trace": "org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: Employee is not mapped [from Employee];

我已经创建了下面给出的模态

@Entity
@Table(name="employee_list")
public class Employee {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column
    private Integer id;

    @Column
    private String name;

    @Column
    private String gender;

    @Column
    private String department;

    @Column
    private Date dob;
    // getters/setters
}

我的实施情况:

@Repository
public class EmployeeDAOImpl implements EmployeeDAO {

    @Autowired
    private EntityManager entityManager;

    @Override
    public List<Employee> get() {
        Session currentSession = entityManager.unwrap(Session.class);
        Query<Employee> query =  currentSession.createQuery("from Employee", Employee.class);
        List<Employee> list = query.getResultList();
        return list;
    }
}

我丢失了一些东西。
我无法确切识别出什么。

3 个答案:

答案 0 :(得分:1)

HQL 应该如下:

currentSession.createQuery("select e from Employee e", Employee.class);

此外,您可以使用 标准API

currentSession.createCriteria(Employee.class).list();

有用的参考文献

答案 1 :(得分:1)

尝试将@EntityScan(basePackage="*the package where your entity lies*")(或类似名称)注释添加到您的EmployeeDAOImpl类中。该查询看起来不错。对于HQL,必须使用类型名称,而不是表名称。 如果您使用的是Spring JPA,还可以尝试使用提供的接口,例如JPARepository或CrudRepository

答案 2 :(得分:1)

@Entity应该来自JPA库,而不是来自休眠库。而且,您应该在查询中使用实体名称:

session.createQuery("from Employee", Employee.class);
相关问题