Исключение запроса Hibernate с отображением таблиц и объектов - PullRequest
0 голосов
/ 26 апреля 2020

Я получаю сообщение об ошибке типа:

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 ]

1 голос
/ 26 апреля 2020

Попробуйте добавить аннотацию @EntityScan(basePackage="*the package where your entity lies*") (или аналогичную) к вашему классу EmployeeDAOImpl. Запрос выглядит хорошо. Для HQL вы должны использовать имя типа, а не имя таблицы. Если вы используете Spring JPA, вы также можете попробовать использовать предоставленные интерфейсы, такие как JPARepository или CrudRepository

1 голос
/ 27 апреля 2020

@ Сущность должна быть из библиотеки JPA, а не библиотеки гибернации. А также, вы должны использовать имя объекта в запросе:

session.createQuery("from Employee", Employee.class);
1 голос
/ 26 апреля 2020

HQL должно выглядеть следующим образом:

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

Также вы можете использовать Criteria API :

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

Полезные ссылки:

...