Hibernate以对象的方式操作数据库,符合OOP的编程模式。这种操作方式大大的简化了程序员与数据库交互的流程,减少了大量操作数据库的代码(不用自己拼写sql语句),通过实体与数据库之间的映射,程序员只需像操作对象及其属性一项操作一个实体就可以完成对数据的增删改查操作,十分方便。
通过Hibernate操作数据库虽然简便高效,但是在某些特殊需求面前,这种方式有显得不是那么灵活,例如从多个表中查询需要的信息。如果利用hibernate从多个表格中查询,结果及为多个表格的笛卡尔积,例如从表A(5个字段)和表B(3个字段)中查询,结果是包含表A和表B的所有字段(8个字段)的多条记录,也就是说相当于生成了一个新的实体,这样就需要一个新的实体与之相对应才能操作查询结果。当然,我们可以在hql中通过new一个实体的方式来取得查询结果,但是如果查询结果记录中海包括其他实体(也就是结果记录与其他表有外键关系),那将会更复杂。
为了解决以上问题,本人采用了hibernate操作视图的方式。
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名&#