我无法使用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:更新在没有休眠的情况下正常工作
答案 0 :(得分:1)
请检查您的Hibernate映射文件是否存在Staat可能您尚未为某些属性/字段配置非空约束,这在数据库中不为空。
答案 1 :(得分:0)
看起来您正在尝试使用预期HQL查询的SQL查询。尝试
Query q = s.createSQLQuery(....);
或者更好的是,使用带有HQL的映射类。但是我不知道你的映射类,所以不能推测具体细节。