Я использую Java 8 с JPA/Hibernate 5.2.1 и базу данных MySQL.MySQLSyntaxErrorException: Неизвестный столбец xxx в 'списке полей'
Таблицы:
+--------+ +----------------+ +----------+
| Rating | | Rating_Employee| | Employee |
+--------+ +----------------+ +----------+
| ID | | RAT_ID | | ID |
| REVIEW | | EMP_ID | +----------+
+--------+ +----------------+
Я пытаюсь сохранить строку в Rating
таблицы, но получаю следующее:
MySQLSyntaxErrorException: Unknown column 'employee0_.distance' in 'field list'
Причина потому, что модель объекта Employee имеет DISTANCE
поле, но не соответствующий столбец в базе данных. Мне нужно поле DISTANCE
, потому что, когда я делаю SELECT
в таблице Employee, я вычисляю DISTANCE
на основе других столбцов с nativeQuery
. Однако, когда Hibernate делает сам выбор при обновлении объединенной таблицы RATING
, он хочет соответствовать DISTANCE
, который не существует (я получаю вышеуказанную ошибку).
Когда я persist
или merge
объект Employee, я использую следующие успешно:
@Column(insertable=false, updatable=false)
private BigDecimal distance;
Вопрос:
Как получить спящий режим игнорировать DISTANCE
при выполнении нон родной запрос select
? (Когда он обновляет RATING
таблицу)
UPDATE
мне посоветовали возможно использовать @Formula("...")
, но мой метод имеет довольно сложный nativeQuery
, который также заказ по distance
. Если я положу формулу в @Formula("...")
, ей также нужно будет получить параметры, переданные в данный момент методу.
Любые идеи?
Вы можете использовать столбец Hibernate @Formula для получения расстояния с помощью нативного запроса SQL: http://stackoverflow.com/questions/2986318/calculated-property-with-jpa-hibernate –
Спасибо Алан, я посмотрим. – Richard
Привет, Алан, моя проблема с использованием '@ Formula', заключается в том, что мне нужно заказать результирующий набор на' distance'. Я не могу получить его и сортировать в java, потому что я получаю только ограниченное количество строк за раз. У тебя есть идеи? Можно ли «упорядочить» столбец '@ Formula'? – Richard