`
finch
  • 浏览: 9280 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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 class="native"/>    
         </id>    
         <property name="name" column="name" type="string" />    
         <property name="age"    column="age"    type="integer" />    
</class>    
<sql-query name="getUser" callable="true">    
      <return alias="user" class="com.test.User">    
              <return-property name="id"       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();   
 
及其类似jdbc的方法
Session session =HibernateSessionFactory.getSession();    
Connection conn = session.connection();    
ResultSet rs =null;    
CallableStatement call = conn.prepareCall("{Call proc()}");    
rs = call.executeQuery();    
rs.close();    
session.close();   
 
这种方法基本上就是jdbc,不过很简单,总是感觉怪怪的~!

还有就是通过强大的createSQLQuery来实现
o(∩_∩)o...哈哈 个人比较喜欢这种方法
Session session =HibernateSessionFactory.getSession();    
SQLQuery query = session.createSQLQuery("{Call proc()}");    
List list =query.list();    
session.close();   
 
如果没有返回值 直接用execute的方法就可以了
(*^__^*) 忘了一个重要的问题就是存储过程的传参问题
 
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();   
 
分享到:
评论

相关推荐

    Hibernate 多数据库支持解决方案

    在迁移过程中,需要对表结构、索引、视图、存储过程等进行相应的调整,确保它们在新数据库中能正常工作。 7. **对UTF-8数据库的特殊处理** - 如果数据库支持UTF-8编码,确保所有字符串字段都设置为UTF-8格式。在...

    struts2 存储过程

    运行项目,通过浏览器访问Action路径,检查是否成功调用存储过程并返回预期结果。 总结,Struts2调用存储过程涉及数据库连接、DAO设计、Action控制和视图展示等多个环节。通过合理配置和编程,我们可以有效地利用...

    struts存储过程

    下面,我们将深入探讨这一主题,包括Struts框架的基础知识、如何在Struts中调用存储过程,以及存储过程在Struts应用中的具体作用。 ### Struts框架简介 Struts是Apache软件基金会的一个开源项目,它是一个基于MVC...

    SSH2利用存储过程连接oracle示例

    不过,如果你的存储过程返回的是复杂对象,你可以通过Hibernate的HQL(Hibernate Query Language)或Criteria API来映射这些结果到Java对象。 在描述中提到,示例代码可能需要根据你的具体数据库环境进行修改。这...

    SSH框架引用存储过程的实例(含源代码)

    同时,需要确保数据库支持存储过程的调用。 2. **定义实体类和映射文件**:创建与表对应的Java实体类,以及对应的.hbm.xml映射文件。在映射文件中,可以使用`&lt;sql-query&gt;`或`&lt;native-query&gt;`元素来声明存储过程。 ...

    J2EE企业级项目开发-1期 06 hibernate映射视图的使用经验.doc

    需要注意的是,视图的映射可能会涉及到复合键的处理,以及可能需要自定义的`equals()`和`hashCode()`方法,确保对象的正确比较和存储。在实际应用中,根据项目的具体需求和所使用的框架特性,合理地运用这些技术能...

    spring mvc+hibernate 图片存储至blob

    总结起来,"spring mvc+hibernate 图片存储至blob"这个主题涉及到Spring MVC处理文件上传、Hibernate将图片数据存入数据库BLOB字段、以及前后端交互等多个技术点。通过理解这些知识点,开发者可以构建一个完整的图片...

    shiro 集成springmvc +hibernate mysql 登录认证以及授权

    在这个项目中,"shiro 集成springmvc +hibernate mysql 登录认证以及授权"是将Shiro与Spring MVC和Hibernate集成,用于构建一个基于MySQL数据库的完整的用户登录认证和权限管理解决方案。 1. **Shiro**:Apache ...

    springmvc+hibernate+oracle基础框架

    Oracle提供了丰富的SQL扩展,以及PL/SQL编程语言,可以进行存储过程、触发器等高级数据库操作。 **整合SpringMVC、Hibernate和Oracle** 整合这三个组件,首先需要在项目中引入相应的库依赖,如SpringMVC和Hibernate...

    三级联动的实例+struts2+hibernate3

    这通常涉及到Ajax异步请求,利用Struts2的拦截器(Interceptor)和ActionContext,以及Hibernate3的Session查询。 1. **Struts2的配置**: - 配置Action:定义每个级联操作对应的Action,包括接收请求、处理业务...

    springMVC +mssql+Hibernate 非注解练手

    MSSQL支持SQL标准,包括T-SQL(Transact-SQL)扩展,用于执行数据库操作、创建存储过程和触发器。在与SpringMVC或Hibernate集成时,MSSQL通常作为后端数据存储,通过JDBC(Java Database Connectivity)接口进行通信...

    Oracle存储过程

    在Java应用中,使用Hibernate框架可以方便地调用Oracle存储过程。如示例所示,通过`getHibernateTemplate().execute()`方法传递一个`HibernateCallback`,然后在回调方法中创建并执行`CallableStatement`。这使得在...

    hibernate3 中文API

    6. **注解支持**: Hibernate 3引入了对Java Persistence API(JPA)注解的支持,如@Entity、@Table、@Id等,简化了对象的映射过程,使得代码更整洁。 7. **第一级缓存(First-Level Cache)**: 每个Session都有一个...

    SpringMVC和Hibernate

    Controller处理业务逻辑,Model存储数据,View负责渲染视图,ViewModel则是数据和视图之间的桥梁。 Hibernate ORM框架允许开发人员用面向对象的方式处理数据库操作,避免了直接编写SQL语句的繁琐工作。它通过映射...

    JSP+Hibernate实现留言板

    这个系统通常涉及用户交互、数据存储以及后端逻辑处理。在这个案例中,我们使用了Java服务器页面(JSP)作为视图层,Hibernate作为持久层框架来处理数据库操作,实现了留言板的功能。下面我们将深入探讨这两个技术...

    struts+hibernate做的商城

    由于项目中提到的jar包超过10MB,未包含在提供的压缩包中,这可能包括Struts、Hibernate、数据库驱动、以及其他依赖库。开发者需要自行下载并将其放入项目的`WEB-INF/lib`目录下,以确保项目的正常运行。 在实际...

    Struts、Hibernate入门代码

    这个过程中,Struts负责控制流程,而Hibernate则处理数据存储和检索。 通过学习和实践SHDemo,你不仅能掌握Struts和Hibernate的基础用法,还能了解如何将它们整合到同一个项目中,提高开发效率。在后续的开发中,你...

    jsf和hibernate资料

    JSF是一种用于构建用户界面的MVC(模型-视图-控制器)框架,而Hibernate则是一个对象关系映射(ORM)工具,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。 **JavaServer Faces (JSF)** JSF是...

Global site tag (gtag.js) - Google Analytics