【问题标题】:Update Table with Hibernate Problem使用休眠问题更新表
【发布时间】:2011-10-06 14:58:16
【问题描述】:

我无法使用 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 管理器。

但现在的问题是:当我想用我的应用程序更新表时,它会生成带有以下输出的 PSQLException: 警告:SQL 错误:0,SQLState:22004 和错误:EXECUTE 的查询字符串参数为空

源代码:

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 的查询字符串参数为空并且无法将数据库状态与会话同步

Edit2:没有休眠的更新工作正常

【问题讨论】:

    标签: sql hibernate postgresql


    【解决方案1】:

    请检查您的 Hibernate 映射文件中的 Staat 可能您没有为某些属性/字段配置非空约束,该属性/字段在数据库中是非空的。

    【讨论】:

      【解决方案2】:

      您似乎正在尝试在需要 HQL 查询的地方使用 SQL 查询。试试

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

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

      【讨论】:

      • 用createSQLQuery,同样的错误依然存在。如果我使用 HQL,它也不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2011-06-20
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多