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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料