spring为hibernate提供了对LOB对像的支持,以oracle数据库为例,配置方法如下:
一.spring配置文件
<!-- 使用jndi连接数据库 -->
<!--<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/develop</value>
</property>
</bean>-->
<!-- 本地Tomcat配置 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.123:1521:dbserver</value>
</property>
<property name="username">
<value>develop</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<!--spring 对 LOB的支持就是要配置这个属性,这里是对oracle的LOB的支持-->
<property name="lobHandler">
<ref local="oracleLobHandler" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.ast.ASTQueryTranslatorFactory
<!-- org.hibernate.hql.classic.ClassicQueryTranslatorFactory -->
</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">30</prop>
</props>
</property>
<property name="mappingLocations">
<list>
<value>classpath:/com/abc/**/entity/*.hbm.xml</value>
</list>
</property>
</bean>
<!-- 对oracle的LOB支持-->
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
<!-- 设置本地 Jdbc 对象抽取器-->
<!-- webLogic下的配置 -->
<!-- bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor"
lazy-init="true" /-->
<!-- tomcat下的配置 -->
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 事务管理-->
<!-- 事务拦截器-->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<!-- 事务代理-->
<bean id="transactionProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass" >
<value>true</value>
</property>
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
说明:上文还是很具有实用价值的,不过对LOB的支持只有这一段:
<!-- 对oracle的LOB支持-->
<bean id="oracleLobHandler"
class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativeJdbcExtractor" />
</property>
</bean>
<!-- 设置本地 Jdbc 对象抽取器-->
<!-- webLogic下的配置 -->
<!-- bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.WebLogicNativeJdbcExtractor"
lazy-init="true" /-->
<!-- tomcat下的配置 -->
<bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
二.配置hibernate影射文件
对clob和blob配置时使用如下方式:
<!-- clob -->
<property name="context" column="context" type="org.springframework.orm.hibernate3.support.ClobStringType"/>
<!--blob -->
<property name="data" column="data" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" />
这里需要注意一下,spring对clob的支持最大为2G
三.pojo配置
clob 对应类型为String,blob 对应类型为byte[],如下:
String context;
byte[] data;
set and get method;
保存或取出数据时将其转换为响应的类型即可。