如何用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...

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

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

直接使用nativeSQL 的 实体查询

sess.createSQLQuery("SELECT * FROM student_1").addEntity(Student.class);

sql = " FROM Student ";