下面是在document.hbm.xml中创建的视图
<database-object>
<create><![CDATA[CREATE VIEW docView
AS
SELECT * from document;
GO]]></create>
<drop>DROP VIEW docView</drop>
<dialect-scope name='org.hibernate.dialect.SQLServerDialect' />
</database-object> 现在,如何在我的方法中调用此视图
我试着这样打电话
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 just like a stored procedure??,而不创建新的实体?
发布于 2014-01-21 18:34:15
您可以使用DB视图,就好像它是常规的实体表一样。定义一个实体类,可以使用@Entity注释,也可以使用等效的XML和视图列的任意子集作为字段。
重要的一点是,您不应该更改实体中的值,因为视图是只读的。
编辑:我不知道像使用存储过程那样使用视图的方法。如果您的存储过程的目的是通过您的注释中所暗示的多个实体进行查询,您可以:
使用视图中的外键列和映射到视图的实体的常规entities
@*To*的所有必要属性。恐怕这不会给您带来很大的帮助,因为您仍然必须使用原生SQL或定义一个实体。
发布于 2014-01-21 18:24:43
创建一个实体以将其映射到视图,然后使用它来查询视图
@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();发布于 2014-01-21 18:20:44
Hibernate视图不是命名查询。您可以在DB中创建视图,然后根据视图创建实体pojos。Hibernate会将这些实体视为映射到视图,然后您可以像通常对hibernate实体所做的那样执行操作。
correctly.
https://stackoverflow.com/questions/21255016
复制相似问题