DennisGuo 2012-09-20 19:33
浏览 223
已采纳

如何用Hibernate查询备份表(表名与实体定义的表名不相同了)

遇到的问题:

 

用Hibernate查询备份表中的记录,比如实体对象Student,映射的表名是student。

在oracle数据库中为这个student表定义了触发器,每个月生成一张备份表,

表名如:student_201201,student_201202,student_201203,student2012_04.....;

 

现在要从这些备份表里面查询记录,可是由于Student实体已经映射了表名为student,所以现在用StudentDao查询备份表中的记录就会报错:

 

org.hibernate.hql.ast.QuerySyntaxException:student_2012_05 is not mapped...;

 

我在StudentDao中的查询方法是这么写的:

 

 

public List<Student> getBackupStudent(String year,String month){
    List<Student> students = new ArrayList<Student>();
    String sql = " SELECT student FROM student_"+year+month+"  student ";"
    Query query = this.createQuery(sql);
    students = query.list();
    return students;
}

Hibernate 后台生成的查询语句是这样的:

 

SELECT student FROM student_201205 student 

 

问题即使那个错误,这个student_201205没有对应的实体,应为他是用数据库的触发器生成的表,Hiberanate 就说它没有Mapped...

像我这样的问题,我想大家也应该可能遇到过吧,请问大家是如何解决的啊!!!!

  • 写回答

3条回答

  • iteye_5246 2012-09-20 19:58
    关注

    如果这个 student_201205 表在数据库中是存在的那么可以用
    Query query = session.createSQLQuery(sql);
    createSQLQuery(sql);//传入一个sql语句,
    实在不行,还可以调用jdbc api,通过
    Connection con=this.getSession().connection();//不推荐这样使用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用