Hibernate: столбец не существует

1

Когда я пытаюсь загрузить Entity с Hibernate, я получаю следующую ошибку в postgres-log:

ERROR: column appuser0_.device_token does not exist at character 35
STATEMENT:  select appuser0_.id as id1_27_0_, appuser0_.device_token as device_t2_27_0_,....

Столбец device_token определенно существует - и если я скопирую-вставьте весь зарегистрированный оператор и выполним его в PGAdmin, я получу ожидаемый результат.

Так что же я забыл? В чем разница между оператором Hibernate и вручную выполненным?

  • 0
    пожалуйста, опубликуйте код вашей сущности и ddl для связанной таблицы
Теги:
spring
hibernate

2 ответа

2

Эта проблема была вызвана конфигурацией нескольких арендаторов, так что был выбран неправильный источник данных.

  • 0
    Приятное напоминание :)
0

В зависимости от того, как вы определили запрос, проблема может быть расположена где-то в другом месте. Например, в запросах HQL используются "имена свойств" класса, а не имена столбцов.

И если у вас есть что-то вроде:

@Column("device_token")
private String deviceToken;

Тогда ваш HQL-запрос должен быть нацелен на "deviceToken", а не "device_token". Мы также столкнулись с подобной ошибкой один раз: Hibernate сообщал, что "user_id" отсутствует, потому что мы назвали свойство "userId" с подчеркнутой версией только для имени столбца.

Это может быть не проблема для вас, но стоит дважды проверить его.

  • 0
    deviceToken определен так, как вы предложили, и запрос выполняется через Spring JPA, который использует Hibernate с ImprovedNamingStrategy. Столбец в базе данных называется «device_token». Просто чтобы попробовать это, я переименовал переменную в «device_token» - но безрезультатно. Интересно отметить: не имеет значения, является ли имя столбца «devicetoken» или «device_token» (с соответствующим именованием в @ Column-annotation) - ошибка остается той же, «ОШИБКА: столбец appuser0_.devicetoken не существует» соответственно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню