首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Hibernate中创建/调用sql视图

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

Stack Overflow用户
提问于 2014-01-21 18:09:25
回答 3查看 19.9K关注 0票数 3

下面是在document.hbm.xml中创建的视图

代码语言:javascript
复制
<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> 

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

我试着这样打电话

代码语言:javascript
复制
Session session = sessFactory.openSession();
Query query = session.createSQLQuery("docView");
List<?> list = query.list();

最终以

代码语言:javascript
复制
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??,而不创建新的实体?

EN

回答 3

Stack Overflow用户

发布于 2014-01-21 18:34:15

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

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

编辑:我不知道像使用存储过程那样使用视图的方法。如果您的存储过程的目的是通过您的注释中所暗示的多个实体进行查询,您可以:

使用视图中的外键列和映射到视图的实体的常规entities

  • relate批注,
  • 使视图足够宽,以包含相关实体所需的@*To*的所有必要属性。

恐怕这不会给您带来很大的帮助,因为您仍然必须使用原生SQL或定义一个实体。

票数 6
EN

Stack Overflow用户

发布于 2014-01-21 18:24:43

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

代码语言:javascript
复制
@Entity
@Table(name = "docView")
public class DocView {

    // Put all fields that you use in your view
    documentField1;
    documentField2;
    .
    .
}

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

代码语言:javascript
复制
Session session = sessFactory.openSession();
Query query = session.createSQLQuery("from DocView");
List<?> list = query.list();
票数 3
EN

Stack Overflow用户

发布于 2014-01-21 18:20:44

Hibernate视图不是命名查询。您可以在DB中创建视图,然后根据视图创建实体pojos。Hibernate会将这些实体视为映射到视图,然后您可以像通常对hibernate实体所做的那样执行操作。

correctly.

  • Create视图您正在编写create DDL查询来创建视图,只有当设置了
  1. 属性时,才会调用该查询。hbm2ddl视图是一个DDl查询,并且它不返回值列表。您不能调用create view查询,就好像它是一个命名的sql查询
  2. 一旦创建了视图,您就可以编写可以从视图中检索数据的命名sql查询。为此,您只需要一个映射到视图和命名查询的POJO即可获取数据。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21255016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档