Обновление таблицы с проблемой гибернации - PullRequest
0 голосов
/ 16 июля 2011

Я не могу обновить таблицу с помощью Hibernate.Таблица создается с помощью следующего оператора и хранится в базе данных PostgreSQL.

CREATE TABLE staat
(
  sta_id serial NOT NULL, -- ID des Staates
  sta_bezeichnung character varying(50) NOT NULL, -- Langbezeichnung
  sta_lkz character varying(10) NOT NULL, -- Laenderkennzeichen
  sta_vorwahl character varying(10), -- Telefon Landesvorwahl
  sta_eu boolean DEFAULT false, -- Ist der Staaat ein EU-Mitglied?
  CONSTRAINT staat_pkey PRIMARY KEY (sta_id),
  CONSTRAINT staat_sta_bezeichnung_key UNIQUE (sta_bezeichnung)
)
WITH (
  OIDS=FALSE
);

Права установлены правильно, поскольку выбор, вставка и обновление возможны с помощью диспетчера SQL.Следующий оператор обновления также работает с SQL Manager.

Но теперь проблема: когда я хочу обновить таблицу с моим приложением, он генерирует PSQLException со следующими выходными данными: WARNUNG: Ошибка SQL: 0, SQLState:22004 и ОШИБКА: аргумент строки запроса EXECUTE имеет значение null

Исходный код:

Query q = s.createQuery("Update Staat set sta_bezeichnung = 'BlaBla' where sta_id = 1");
int status = q.executeUpdate();

Я думаю, что проблема связана со столбцами NOT NULL, потому что таблицы без столбцов NOT NULL могутобновиться с тем же исходным кодом ...

Кто-нибудь имеет представление о том, что не так или что я должен делать ???

Редактировать: пробовал с SQL (q.executeSQLUpdate)и HQL

Transaction tr = s.beginTransaction();
staat = (Staat)s.get(Staat.class, new Integer(0));
staat.setStaBezeichnung("BlaBla");
s.update(staat);
tr.commit();

Генерирует следующее сообщение об ошибке: ОШИБКА: аргумент строки запроса EXECUTE имеет значение NULL и не удалось синхронизировать состояние базы данных с сеансом

Edit2: обновление работает без спящего режима

Ответы [ 2 ]

1 голос
/ 16 июля 2011

Пожалуйста, проверьте файл сопоставления Hibernate на Staat, возможно, вы не настроили ненулевое ограничение для какого-либо атрибута / поля, которое не равно нулю в базе данных.

0 голосов
/ 16 июля 2011

Похоже, вы пытаетесь использовать SQL-запрос там, где ожидается HQL-запрос. Попробуйте

Query q = s.createSQLQuery(....);

Или, что еще лучше, используйте сопоставленные классы с HQL. Но я не знаю ваших сопоставленных классов, поэтому не могу размышлять о специфике.

...