Hibernate 更新某个值

Posted

技术标签:

【中文标题】Hibernate 更新某个值【英文标题】:Hibernate update a certain value 【发布时间】: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 无法使用我的查询更新它。 【参考方案1】:

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

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

【讨论】:

以上是关于Hibernate 更新某个值的主要内容,如果未能解决你的问题,请参考以下文章

当为 Postgres DB 的属性 spring.jpa.hibernate.ddl-auto 提供更新值时,Hibernate 不会生成序列

如何在hibernate中更新值数组

hibernate级联更新外键问题

如何防止 Hibernate 更新 NULL 值

Hibernate:行被另一个事务更新或删除(或未保存值映射不正确)

Hibernate 在调用 Setter 时更新数据