#java #hibernate #postgresql #jpa
#java #впасть в спящий режим #postgresql #jpa
Вопрос:
У меня есть две таблицы в моей базе данных: packet_type и unit. Я создал что-то вроде класса объектов PacketTypeExt для извлечения объединенных данных из обеих таблиц. У меня есть простой namedquery:
@NamedQuery(name="PacketTypeExt.findAll", query="select p.price, p.unit_amount as unitAmount, u.title as unitTitle from packet_type p join unit u on (p.idunit = u.idunit)")
У меня также есть такие поля в этом классе:
private int idpackettype;
private float price;
private int unitAmount;
private String unitTitle;
Я не хочу создавать другую таблицу или представление для хранения объединенных данных, поэтому я не поместил аннотацию «Сущность». После запуска веб-страницы я получил сообщение об ошибке:
java.lang.IllegalArgumentException: Named query not found: PacketTypeExt.findAll
Какой самый быстрый и наименее сложный способ успешно получить такие данные?
Комментарии:
1. Предполагается, что NamedQuery использует имя объекта в JPQL, но ваш использует имя таблицы (если только вы не задали метаданные JPA для класса, чтобы иметь имя объекта в качестве packet_type . Также в сообщении говорится, что ЗАПРОС не найден, а не ТАБЛИЦА.
2. Затем, после добавления аннотации @Entity(name =»packet_type») Я получаю около 5 новых ошибок в eclipse о некорректности запроса… -Путь к полю состояния ‘p.unit_amount’ не может быть преобразован в допустимый тип. — Тип абстрактной схемы ‘unit’ неизвестен. — Путь к полю состояния ‘u.title’ не может быть преобразован в допустимый тип. — Путь к полю состояния ‘u.idunit’ не может быть преобразован в допустимый тип. Нет действительно простого рецепта для получения столбцов из двух таблиц??
3. Послушайте, если вы хотите использовать NamedQuery, ваш запрос должен быть JPQL. Если вы хотите использовать NamedNativeQuery, то ваш запрос — SQL.
4. Что ж, это именно тот ответ, который я искал 🙂 Спасибо за вашу помощь и ваше терпение!