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)]
其他查询将正常执行。我可以插入表中,可以获取所有记录,但是此更新查询是问题所在。
要检查和注意的几件事:
UPDATE查询中使用的表名应引用映射的Java类名,而不是数据库表名,并且区分大小写。那么查询中的users
是表名吗,因为我们很少用小写字母开头Java类吗?如果是,请将其更改为映射的Java类名称。 (同样适用于列,也使用映射的Java对象字段名称,而不是实际的表列名称)
使用ORM的要点是我们不想手动编写SQL来更新数据库记录。我们希望将数据库记录视为对象,因此通过更改此对象的状态,它将自动生成SQL以更新相应的数据库记录。因此,使用JPA更新记录的正确方法是获取要更新的记录,更改其状态:
User user = entmngr.find(User.class, 2L);
user.setName("John")