0

我在休眠时面临更新 hql 查询的问题。

这是我的以下课程:

    --session configuration
     ExamResults examResults = new ExamResults();
     examResults.setTitle("cbse board jee");
     examResults.setId(2);
     String hql = "UPDATE EXAMRESULTS SET TITLE=:TITLE WHERE ID=:ID";
     Query query = session.createQuery(hql);
     query.setParameter("TITLE", examResults.getTitle());
     query.setParameter("ID", examResults.getId());
     int result = query.executeUpdate();
     System.out.println("Rows Effected=>"+result);


     session.save(examResults);

     tx.commit();

   }
}

在运行课程时,我收到以下异常:

Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: EXAMRESULTS is not mapped [UPDATE EXAMRESULTS SET TITLE=:TITLE WHERE ID=:ID]
    at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
    ...

我的豆类也在这里:

@Entity
@Table(name="EXAMRESULTS")
public class ExamResults implements Serializable{

    private int id;
private String title;
private String body1;
private String body2;
private Date resultdate;
private String affiliation;
private int isactive;
private String url;
private String imageurl;
//private CommonsMultipartFile imageurlimg;
private String metatitle;
private String metadescription;
private String metakeywords;
private Date createddate;


    --getters & setters

解决问题的正确方法应该是什么?

4

1 回答 1

1

而不是EXAMRESULTS尝试使用ExamResultsie 实体的类名。您需要在 HQL 查询中使用类名而不是表名。因此将查询更新为:

UPDATE ExamResults e SET e.TITLE=:TITLE WHERE e.ID=:ID

HQL 文档提到:

除了 Java 类和属性的名称之外,查询不区分大小写。所以 SeLeCT 和 sELEct 一样,和 SELECT 一样,但是 org.hibernate.eg.FOO 和 org.hibernate.eg.Foo 不同,foo.barSet 和 foo.BARSET 也不同。

文档:http ://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch11.html#d5e2551

于 2012-12-13T09:00:55.020 回答