MariaDB上使用Hibernate的JPQL更新查询中的错误

问题描述 投票:0回答:1

Hi

我正在尝试使用休眠方式更新MariaDB数据库表中的一行。就像这样:

    public static void updateJPQL() {
        EntityManager entmngr = JPAProvider.getEntityManager();
        EntityTransaction transaction = entmngr.getTransaction();
        transaction.begin();
        Query query = entmngr.createQuery("UPDATE users o set o.name = 'John' where o.id =: NID");
        query.setParameter("NID", 2L);

        query.executeUpdate();


        transaction.commit();
        entmngr.close();
    }

Hibernate出现此错误:

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.sql.ast.SqlTreeCreationException: Could not locate TableGroup - NavigablePath[model.entity.Users(o)]

其他查询将正常执行。我可以插入表中,可以获取所有记录,但是此更新查询是问题所在。

java hibernate mariadb jpql
1个回答
0
投票

要检查和注意的几件事:

  • UPDATE查询中使用的表名应引用映射的Java类名,而不是数据库表名,并且区分大小写。那么查询中的users是表名吗,因为我们很少用小写字母开头Java类吗?如果是,请将其更改为映射的Java类名称。 (同样适用于列,也使用映射的Java对象字段名称,而不是实际的表列名称)

  • 使用ORM的要点是我们不想手动编写SQL来更新数据库记录。我们希望将数据库记录视为对象,因此通过更改此对象的状态,它将自动生成SQL以更新相应的数据库记录。因此,使用JPA更新记录的正确方法是获取要更新的记录,更改其状态:

User user = entmngr.find(User.class, 2L);
user.setName("John")
© www.soinside.com 2019 - 2024. All rights reserved.