如何在Hibernate中创建/调用sql视图

这是在document.hbm.xml创建的视图

   DROP VIEW docView   

现在如何在我的方法中调用此视图

试着像这样打电话

 Session session = sessFactory.openSession(); Query query = session.createSQLQuery("docView"); List list = query.list(); 

结束了

 Caused by: java.sql.SQLException: The request for procedure 'docView' failed because 'docView' is a view object. at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632) 

任何想法或任何其他方式在hibernate中调用sql视图?

简而言之,有一种方式可以像存储过程那样调用view 吗? ,而不是创建一个新的实体?

您可以使用DB视图,就像它是常规实体表一样。 使用@Entity批注或等效XML以及视图列的任意子集作为字段定义实体类。

重要的一点是,您不应更改实体中的值,因为视图是只读的。

编辑:我不知道如何使用像存储过程一样的视图。 如果存储过程的目的是查询评论中隐含的多个实体,则可以:

  • 使视图“宽泛”足以包含所需实体的所有必要属性
  • 与视图中使用外键列的相关实体相关,以及映射到视图的实体的常规@*To*注释。

我担心这不会给你带来太大的影响,因为你仍然需要使用本机SQL或定义一个实体。

创建一个实体以将其映射到您的视图,然后使用它来查询您的视图

 @Entity @Table(name = "docView") public class DocView { // Put all fields that you use in your view documentField1; documentField2; . . } 

然后你可以像这样进行查询:

 Session session = sessFactory.openSession(); Query query = session.createSQLQuery("from DocView"); List list = query.list(); 

Hibernate视图不是命名查询。 您可以在数据库中创建视图,然后在考虑视图的情况下创建实体pojos。 Hibernate将这些实体视为映射到视图,然后您可以像通常对hibernate实体那样执行操作。

  1. 您正在编写创建DDL查询以创建视图,只有在正确设置hbm2ddl属性时才会调用该视图。
  2. 创建视图是一个DDl查询,它不返回值列表。 您不能将创建视图查询称为其命名的sql查询
  3. 创建视图后,您可以编写可以从视图中检索数据的命名sql查询。 为此,您需要的是一个映射到视图的POJO和用于获取数据的命名查询。