使用Hibernate问题更新表

时间:2011-07-16 04:57:01

标签: sql hibernate postgresql

我无法使用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 Manager可以进行选择,插入和更新。以下更新语句也适用于SQL Manager。

但现在问题是:当我想用我的应用程序更新表时,它会生成PSQLException并输出以下内容: WARNUNG:SQL错误:0,SQLState:22004和ERROR: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 个答案:

答案 0 :(得分:1)

请检查您的Hibernate映射文件是否存在Staat可能您尚未为某些属性/字段配置非空约束,这在数据库中不为空。

答案 1 :(得分:0)

看起来您正在尝试使用预期HQL查询的SQL查询。尝试

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

或者更好的是,使用带有HQL的映射类。但是我不知道你的映射类,所以不能推测具体细节。