我是Hibernate的新手,我正在尝试像下面那样更新表列,但是它给出了一个异常 - 表没有映射异常。
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "UPDATE TEST_TABLE SET LAST_REFRESH_DATE = :dateToday";
Query query = session.createQuery(hqlUpdate);
query.setParameter("dateToday", new UtilityDate().getTodayDate());
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
异常
SEVERE:servlet [springmvc]的Servlet.service()与path的上下文 [/ TEST]抛出异常[请求处理失败;嵌套异常 是org.hibernate.hql.ast.QuerySyntaxException:TEST_TABLE不是 映射[UPDATE TEST_TABLE SET LAST_REFRESH_DATE =:dateToday]] 根本原因org.hibernate.hql.ast.QuerySyntaxException:TEST_TABLE是 未映射[UPDATE TEST_TABLE SET LAST_REFRESH_DATE =:dateToday] at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181) 在 org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) 在 org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:94)
我已经在Stack Overflow中验证了所有相关问题。
答案 0 :(得分:1)
在定义表映射之后,在hibernate中,我们始终根据Object和Classes与系统进行通信。根据您发布的代码段,您似乎在HQL中使用数据库表名称及其列名,这是错误的。而不是这个,您需要指定映射的表类名称及其属性名称来代替表列名称。
如果表TEST_TABLE与Java类TestTable映射,而lastRefreshDate是映射到LAST_REFRESH_DATE列的此类的属性,那么下面应该是代码。
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "UPDATE TestTable SET lastRefreshDate = :dateToday";
Query query = session.createQuery(hqlUpdate);
query.setParameter("dateToday", new UtilityDate().getTodayDate());
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);