"未映射"在Hibernate中更新表时发生异常

时间:2016-08-11 07:19:39

标签: java spring hibernate

我是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中验证了所有相关问题。

1 个答案:

答案 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);