这是在中创建的视图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)
有什么想法或任何其他方式在休眠中调用 sql 视图吗?
简而言之,有没有一种方法可以调用view
就像存储过程一样? https://stackoverflow.com/questions/14608667/unable-to-get-multiple-table-entities-through-stored-procedure-using-hibernate,无需创建新实体?
您可以像使用常规实体表一样使用数据库视图。使用 @Entity 注释或等效的 XML 以及视图列的任意子集作为字段来定义实体类。
重要的一点是,您不应更改实体中的值,因为视图是只读的。
编辑:我不知道如何使用像存储过程这样的视图。如果您的存储过程的目的是查询评论中暗示的多个实体,您可以:
- 使视图足够“广泛”以包含所需实体的所有必要属性
- 使用视图和常规中的外键列关联相关实体
@*To*
映射到视图的实体的注释。
恐怕这不会让您走得太远,因为您仍然必须使用本机 SQL 或定义实体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)