【问题标题】:How can I update specific field in database by HibernateTemplate如何通过 HibernateTemplate 更新数据库中的特定字段
【发布时间】:2012-11-14 06:48:12
【问题描述】:

我想使用 HibernateTemplate 更新数据库 Persons 表中的特定字段。我正在尝试这样做,但这不起作用。

public void  updateDate(int Id,Date receivedDate) {
      Id = 10;
      receivedDate = 2012-11-12;
      String queryString = "update Persons set recievedDate=? where Id=? ";
      getHibernateTemplate().update(queryString, new Object[] { Id, receivedDate });
}

我在运行此查询时收到异常“UnkownEntity”。我可以使用 HibernateTemplate 来更新特定字段吗?是否有其他替代方法可以进行特定字段更新?

【问题讨论】:

  • 能否请您显示使用实体人的代码。

标签: java sql hibernate exception sql-update


【解决方案1】:

getHibernateTemplate 中的update 方法不允许执行 hql 查询。它只允许休眠实体对象。

见链接hibernate template update method

在您的情况下,Hibernate 尝试将 update Persons set recievedDate=? where Id=? 解析为实体。

解决方案:

Query q = s.createQuery("update Persons set recievedDate=:recievedDate where Id=:Id");
q.setString("recievedDate", "some date");
q.setString("Id", "54");
q.executeUpdate();

希望它清楚。

【讨论】:

  • 非常感谢。这对我来说非常有用。你为我节省了很多时间。
  • 附带说明: 实际上您仍然可以使用bulkUpdate(String queryString) 执行以Hibernate 的查询语言表达的查询.
【解决方案2】:

您必须在会话工厂配置中列出您的类。

【讨论】:

  • 我已经这样做了。上面的同一个人对象适用于其他查询。我的查询是否正确?
【解决方案3】:

我假设您的实体名为 Person 在 HQL 中你必须使用 java 类名,而不是 db 表名

【讨论】:

    【解决方案4】:

    如果使用 HibernateTemplate,这是我的解决方案。

    // EntityName is the table to be updated
    
    EntityName entity =  hibernateTemplate.find("from EntityName where id=?" , id);
    
    //set the value which has to be updated
    
    entity.setValue(yourNewValue);
    
    hibernateTemplate.SaveOrUpdate(entity);  
    
    // above updated the existing Entity table without duplicates
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2018-03-31
      相关资源
      最近更新 更多