利用HibernateTemplate对CLOB对象操作
Oracle中的varchar2对象最多只能存4000个字节,对于要进行大批量字符对象的存储来说显然是远远不够的,这时就需要用到CLOB。
Spring的HibernateTemplate的既有方法完全兼容对CLOB对象的操作,仅仅需要简单的配置:
1.保留实体中需要保存为CLOB对象的属性为String,而在hbm映射文件中将其修改为org.springframework.orm.hibernate3.support.ClobStringType
2.如果仅仅这样,会抛出异常:No LobHandler found for configuration - lobHandler property must be set on LocalSessionFactoryBean
解决方法:
(1).声明一个处理句柄:
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
(2).在sessionFactory中注入lobHandler:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="lobHandler" ref="lobHandler"/>
</bean>
提示: 指定lobHandler时,对于MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而Oracle 9i,
则可以使用OracleLobHandler。因为Oracle9i处理lob的方式和不太一样,所以这里要用spring提供的SimpleNativeJdbcExtractor.处理Oracle9i lob类型的特殊声明:
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.
SimpleNativeJdbcExtractor"/>
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor"/>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 为处理Blob类型字段的句柄声明 -->
<property name="lobHandler">
<ref local="lobHandler" />
</property>
</bean>
同时还应该使用对应的JDBC驱动。
分享到:
相关推荐
HibernateTemplate提供了丰富的API,可以实现对数据库的基本操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)等。以下是一些常用的方法: 1. `void delete(Object entity)`: 这个方法用于...
本文将对HibernateTemplate的主要用法进行详细介绍。 #### 二、核心方法解析 在HibernateTemplate中,提供了多种常用的方法来实现数据访问操作(CRUD): 1. **`void delete(Object entity)`**:用于删除一个指定...
List<Teacher> teachers = (List) hibernateTemplate.findByNamedQuery("findTeachersByName"); ``` 5. **get(Class entityClass, Serializable id)**:根据主键获取实体对象。 - **示例**: ```java Long id ...
HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...
List<String> names = (List) hibernateTemplate.find("select name from Person where age > ?", new Object[]{18}); ``` #### 七、总结 通过本文的介绍,我们可以了解到`HibernateTemplate`在Spring框架中的...
hibernateTemplate常用方法.htm
其中,`HibernateTemplate`作为Spring框架中的一个重要组件,为开发者提供了丰富的API来处理数据库操作,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的数据访问细节。 #### 二、HibernateTemplate简介 ...
hibernateTemplate.save(user); } } ``` #### 四、避免直接获取Session 直接通过`getSession()`等方法获取`Session`对象可能会导致一系列问题: - **事务一致性**:如果在不同的地方获取了多个`Session`对象...
这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...
List<User> users = hibernateTemplate.find("from User"); // 执行保存操作 User user = new User(); user.setName("张三"); hibernateTemplate.save(user); ``` #### 七、总结 `HibernateTemplate`是Spring框架...
因此,在使用这两个方法时,需要确保对实体对象的状态有一个清晰的认识。 总之,HibernateTemplate 是一个非常强大且灵活的工具,它极大地简化了基于 Hibernate 的数据访问操作。然而,正确地理解和使用这些方法...
hibernateTemplate.save(user); } // 其他操作 } ``` 4. **源码分析**:通过阅读Spring和Hibernate的相关源码,我们可以更深入地理解这两个库是如何协同工作的。SessionFactory的创建过程、HibernateTemplate的...
return hibernateTemplate.get(User.class, id); } public List<User> findAllUsers() { return hibernateTemplate.find("from User"); } ``` **四、优缺点** 虽然HibernateTemplate简化了许多操作,但也有其...
为了简化Hibernate与Spring的集成,Spring提供了HibernateTemplate类,它是Spring对Hibernate的一种封装,使得在DAO层操作数据库变得更加简便和安全。 首先,我们来看如何在DAO中使用HibernateTemplate。通常,DAO...
`HibernateTemplate`在事务管理、异常转换等方面提供了很多便利,而`HibernateDaoSupport`是一个抽象类,它的目的是为DAO提供对`HibernateTemplate`的便捷访问。 当我们在DAO中继承`HibernateDaoSupport`时,可以...
本文将深入探讨如何利用Hibernate中的`HibernateTemplate`类进行批量数据删除操作,这不仅能够提高数据处理效率,还能优化数据库性能。 ### HibernateTemplate与批量删除 在Hibernate框架中,`HibernateTemplate`...
- `hibernateTemplate.execute()`方法用于执行自定义的Hibernate操作。这里传入了一个实现了`HibernateCallback`接口的匿名内部类,该类的`doInHibernate`方法定义了具体的数据库操作逻辑。 ##### 2. 处理查询结果 ...
以下是一段示例代码,旨在演示如何使用`HibernateTemplate`进行多个数据库操作,并确保所有操作处于同一事务中: ```java public static void main(String[] args) { CtxUtil.getBaseManager()....
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式操作数据库,极大地简化了数据库操作。本教程将深入探讨如何模拟HibernateTemplate,这是Spring框架中的一个辅助...