【问题标题】:Hibernate update a certain valueHibernate 更新某个值
【发布时间】:2014-07-23 09:13:16
【问题描述】:

我编写了一个方法,如果它具有特定标识符,则选择或更新一个值:

@Transactional
public List<Settings> getSettingsByParameter(String identifier) throws Exception {
    log.info("get resultsList by " + identifier);

    if(identifier.isEmpty()) {
        throw new Exception("Identifier is empty!");
    }

    if(identifier == "today") {
        //update today field
        String query = "UPDATE settings SET value=TODAY() where identifier = '" + identifier + "'";
        em.merge(em.createQuery(query, Settings.class).getSingleResult()); 
    }

    String query = "SELECT p FROM Settings p WHERE identifier = '" + identifier + "'";
    List<Settings> resultList = em.createQuery(query, Settings.class).getResultList(); 

    return resultList;
}

但是,我遇到了一个异常:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: settings is not mapped [UPDATE settings SET value=TODAY() where identifier = 'today']

为什么以及如何使用 hibernate 和 hsqldb?

非常感谢您的回答!

【问题讨论】:

  • 只是好奇。 if(identifier == "today") { 这种情况适合你吗?
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 是的,这对我有用。它基本上来自服务并注入到我的 dao 中。但是,hibernate 无法使用我的查询更新它。

标签: java hibernate hsqldb


【解决方案1】:

Hibernate 对类名区分大小写。尝试在 Settings 类中使用大写的 S:

String query = "UPDATE Settings SET value=TODAY() where identifier = '" + identifier + "'";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2015-09-25
    • 2021-11-16
    • 1970-01-01
    • 2011-11-22
    • 2019-08-12
    • 2021-12-20
    相关资源
    最近更新 更多