hibernate是否支持视图以及存储过程
hibernate是否支持视图以及存储过程呢??
Hibernate2支持视图,不支持存储过程
Hibernate3支持视图,也支持存储过程
1. 其实视图和表对于Hibernate来说,并无任何区别,你是如何应用表,就是如何应用视图。
2.Hibernate3调用存储过程
为了在Hibernate中使用存储过程,你必须遵循一些规则,不遵循这些规则的存储过程将不可用.如果你仍然想要使用他们,这些规则针对于不同的数据库.因为数据库提供商有各种不同的存储过程语法和语义:
(一)必须通过session.connection()来执行他们。
(二)对存储过程进行的查询无法使用setFirstResult()/setMaxResults()进行分页。
(三)对于Oracle有如下规则:
??????? 函数必须返回一个结果集。存储过程的第一个参数必须是OUT,它返回一个结果集。这是通过Oracle 9或10的SYS_REFCURSOR类型来完成的。在Oracle中你需要定义一个REF CURSOR类型,参见Oracle的手册。
(四)对于Sybase或者MS SQL server有如下规则:
?????? 存储过程必须返回一个结果集。注意如果servers可能返回多个结果集以及更新的数目,Hibernate将取出第一条结果集作为它的返回值,其他将被丢弃。 如果你能够在存储过程里设定SET NOCOUNT ON,这可能会效率更高,但这不是必需的。
?
CREATE TABLE `proctab` ( `id` int ( 11 ) NOT NULL auto_increment, `Name` varchar ( 20 ), `age` int ( 11 ), PRIMARY KEY (`id`) )?
create PROCEDURE proc() begin select * from proctab; end ;?一种方法是通过hibernate传统的xml映射方式去调用
<class name="com.test.User" table="proctab"> <id name="id" column="id"> <generator column="name" type="string" /> <property name="age" column="age" type="integer" /> </class> <sql-query name="getUser" callable="true"> <return alias="user" column="id" /> <return-property name="name" column="name" /> <return-property name="age" column="age" /> </return> {call proc()} </sql-query> ?Session ss= HibernateSessionFactory.getSession() List li=ss.getNamedQuery("getUser").list(); ss.close(); ?Session session =HibernateSessionFactory.getSession(); Connection conn = session.connection(); ResultSet rs =null; CallableStatement call = conn.prepareCall("{Call proc()}"); rs = call.executeQuery(); rs.close(); session.close(); ?Session session =HibernateSessionFactory.getSession(); SQLQuery query = session.createSQLQuery("{Call proc()}"); List list =query.list(); session.close(); ?CallableStatement call = conn.prepareCall("{Call proc(?)}"); call.setString(1, 参数); rs = call.executeQuery(); ?SQLQuery query = session.createSQLQuery("{Call proc(?)}"); query.setString(0, 参数); List list =query.list(); ?