java - 如何在 Hibernate 中创建/调用 sql View

标签 java sql hibernate orm

这是在 document.hbm.xml 中创建的 View

<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> 

现在如何在我的方法中调用这个 View

试过这样调用

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 有什么想法或其他方法吗?

简而言之,有没有办法调用 view just like a stored procedure?? ,而不创建新实体??

最佳答案

您可以像使用常规实体表一样使用数据库 View 。定义一个实体类,使用 @Entity 注释或等效的 XML 和 View 列的任意子集作为字段。

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

编辑:我不知道像存储过程一样使用 View 的方法。如果您的存储过程的目的是查询评论中暗示的多个实体,您可以:

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

恐怕这不会让您走得太远,因为您仍然必须使用 native SQL 或定义一个实体。

关于java - 如何在 Hibernate 中创建/调用 sql View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255016/

相关文章:

java - 安卓房间Base64

java - 无法从 Android 模拟器连接到本地主机

java - ResultSet 从查询转换为 int

php - 在 mysql 查询中提供无效查询

hibernate - Grails (v2.2) 应用程序通过 run-app 启动,但在 tomcat 7 上部署 war 时死掉

mysql - Hibernate 不会在不同的操作系统下加载某些表

java - 我可以将 pipedoutputstream 用于多线程吗?

java - 在java方法中重新编译源代码?

sql - 在 CakePHP 3 的 COUNT 中使用 DISTINCT

java - Hibernate/JPA 是否考虑了 transient 修饰符(而不是注释)