在使用hibernate将查询出的数据映射到实体类时,出现映射错误,原因是有些特殊类型的字段不能直接进行映射,比如image等
解决方法,spring配置文件中,"sessionFactory"bean的有一项hibernate.dialect,是指定hibernate所使用的方言的,他的值可以写到一个自定义的property文件中,内容如下
#sessionFactory
#hibernate.dialect = org.hibernate.dialect.SQLServerDialect
hibernate.dialect = cpcns.gongyongzujian.util.MySQLServerDialect
#hibernate.show_sql = false;
hibernate.show_sql = true;
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingJarLocations">
<list>
<value>WEB-INF/lib/cpcns_base.jar</value>
<value>WEB-INF/lib/CPCNS_ZuJianBase.jar</value>
</list>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/cpcns/gongyongzujian/wenjianchuanshu/model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.connection.release_mode">after_statement</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">10</prop>
</props>
</property>
</bean>
我们可以继承它的SQLServerDialect类,在自己定义的类里做下转换
public class MySQLServerDialect extends SQLServerDialect{
public MySQLServerDialect() {
super();
registerHibernateType(Types.LONGVARBINARY, Hibernate.BLOB.getName());
}
}
同时将hibernate.dialect 的值改为 cpcns.gongyongzujian.util.MySQLServerDialect,及在.property中如下设置
hibernate.dialect = cpcns.gongyongzujian.util.MySQLServerDialect