Spring:使用没有hibernate.cgf.xml的Hibernate类型 [英] Spring : Use Hibernate types without hibernate.cgf.xml

查看:137
本文介绍了Spring:使用没有hibernate.cgf.xml的Hibernate类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Hibernate作为ORM工具的Spring-MVC应用程序。我们想加密一些列,为此我使用Jasypt。现在,为此我必须使用注释@Type,但它要求应该有一个hibernate.cfg.xml文件。不幸的是,我没有使用hibernate.cfg.xml,我的sessionFactory和所有其他配置都在applicationServletContext.xml和root-context.xml中定义。



这些类型我想使用:文件名:jasyptHibernateTypes.hbm.xml

 <?xml version =1.0encoding =UTF- 8\" >?; 
<!DOCTYPE hibernate-mapping PUBLIC - // Hibernate / Hibernate映射DTD 3.0 // EN
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\"> ;

< hibernate-mapping>

<! - VARCHAR,CLOB,基于文本的类型 - >

< typedef name =encryptedStringclass =org.jasypt.hibernate.type.EncryptedStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedBigDecimalAsStringclass =org.jasypt.hibernate.type.EncryptedBigDecimalAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedBigIntegerAsStringclass =org.jasypt.hibernate.type.EncryptedBigIntegerAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedBooleanAsStringclass =org.jasypt.hibernate.type.EncryptedBooleanAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedByteAsStringclass =org.jasypt.hibernate.type.EncryptedByteAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedCalendarAsStringclass =org.jasypt.hibernate.type.EncryptedCalendarAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedDateAsStringclass =org.jasypt.hibernate.type.EncryptedDateAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedDoubleAsStringclass =org.jasypt.hibernate.type.EncryptedDoubleAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedFloatAsStringclass =org.jasypt.hibernate.type.EncryptedFloatAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedIntegerAsStringclass =org.jasypt.hibernate.type.EncryptedIntegerAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedLongAsStringclass =org.jasypt.hibernate.type.EncryptedLongAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedShortAsStringclass =org.jasypt.hibernate.type.EncryptedShortAsStringType>
< param name =encryptorRegisteredName> jasyptHibernateEncryptor< / param>
< / typedef>


<! - - VARBINARY,基于BLOB的类型 - >
< typedef name =encryptedBinaryclass =org.jasypt.hibernate.type.EncryptedBinaryType>
< param name =encryptorRegisteredName> jasyptByteHibernateEncryptor< / param>
< / typedef>

<! - - 基于数字的数字类型 - >
< typedef name =encryptedBigDecimalclass =org.jasypt.hibernate.type.EncryptedBigDecimalType>
< param name =encryptorRegisteredName> jasyptBigDecimalHibernateEncryptor< / param>
< / typedef>

< typedef name =encryptedBigIntegerclass =org.jasypt.hibernate.type.EncryptedBigIntegerType>
< param name =encryptorRegisteredName> jasypBigIntegertHibernateEncryptor< / param>
< / typedef>



< / hibernate-mapping>

以下是我的root-context.xml:

 < context:component-scan base-package =com.journaldev.spring> 
< context:exclude-filter type =annotationexpression =org.springframework.stereotype.Controller/>
< / context:component-scan>

< context:property-placeholder location =classpath:application.properties/>

< bean:bean id =dataSourceclass =org.apache.commons.dbcp.BasicDataSource
destroy-method =close>
< beans:property name =driverClassNamevalue =org.postgresql.Driver/>
< beans:property name =url
value =jdbc:postgresql:// localhost:5432 / dbname/>
< beans:property name =usernamevalue =postgres/>
< beans:property name =passwordvalue =password/>
< beans:property name =removeAbandonedvalue =true/>
< beans:property name =removeAbandonedTimeoutvalue =20/>
< beans:property name =defaultAutoCommitvalue =false/>
< / beans:bean>

<! - Hibernate 4 SessionFactory Bean定义 - >
< beans:bean id =hibernate4AnnotatedSessionFactory
class =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
< beans:property name =dataSourceref =dataSource/>
< beans:property name =packagesToScanvalue =com.journaldev.spring.model/>

< beans:property name =hibernateProperties>
< beans:道具>
< beans:prop key =hibernate.dialect> org.hibernate.dialect.PostgreSQL9Dialect< / beans:prop>
<! - < beans:prop key =hibernate.jdbc.batch_size> 1000< / beans:prop>
< beans:prop key =hibernate.order_updates> true< / beans:prop> - >
< beans:prop key =hibernate.hbm2ddl.auto> update< / beans:prop>
< beans:prop key =cache.use_second_level_cache> true< / beans:prop>
< beans:prop key =cache.use_query_cache> true< / beans:prop>
< / beans:道具>
< / beans:property>
< / beans:bean>

< beans:bean id =LoginServiceImplclass =com.journaldev.spring.service.LoginServiceImpl/>

< task:annotation-driven />

< tx:注解驱动的事务管理器=transactionManager/>

< beans:bean id =transactionManagerclass =org.springframework.orm.hibernate4.HibernateTransactionManager>
< beans:property name =sessionFactoryref =hibernate4AnnotatedSessionFactory/>
< / beans:bean>

< beans:bean id =stringEncryptorclass =org.jasypt.encryption.pbe.StandardPBEStringEncryptorlazy-init =false>
< beans:property name =algorithmvalue =PBEWithMD5AndDES/>
< beans:property name =passwordvalue =password/>
< / beans:bean>

< beans:bean id =hibernateEncryptorclass =org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptorlazy-init =false>
<! - 此属性值必须与定义休眠用户类型时使用的encryptorRegisteredName匹配 - >
< beans:property name =registeredNamevalue =jasyptHibernateEncryptor/>
< beans:property name =encryptorref =stringEncryptor/>
< / beans:bean>

正如您所看到的,我的主要配置位于此文件中,并且我还将拦截器放在此处。我得到这个错误:

 引起:org.hibernate.MappingException:无法确定类型:encryptedString 
在org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:516)
在org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:42)
在org.hibernate.cfg .Configuration.processSecondPassesOfType(Configuration.java:1472)
位于org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java :1846)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
org.springframew org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
org.springframework上的orb.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)。 beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
... 98 more
导致:org.hibernate.annotations.common.reflection.ClassLoadingException:无法加载Class [encryptedString ]
at org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl.classForName(StandardClassLoaderDelegateImpl.java:60)
at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:497)
... 108 more
引起:java.lang.ClassNotFoundException:encryptedString
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.lo ader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)$ b $在java.lang.Class.forName0(本地方法)
在java.lang.Class.forName(Class.java:348)
at org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl.classForName(StandardClassLoaderDelegateImpl.java:57)
... 109 more

模型类:

  @Column(name =mnotetext)
@Type(type =encryptedString)
private String mnotetext;

@Column(name =mnoteheadline)
@Type(type =encryptedString)
private String mnotetag;

我应该如何使用没有hibernate.cfg.xml的类型。如何指示hibernate它们在这个xml文件中。非常感谢。 : - )

更新



模型类:

  @TypeDef(name =registeredName,
defaultForType = org.jasypt.hibernate.type.EncryptedStringType.class,
typeClass = org.jasypt.hibernate.type.EncryptedStringType.class)
@Entity
@Table(name =groupnotes)
public class GroupNotes实现Serializable {
@Column(name =mnotetext)
@Type(type =registeredName)
private String mnotetext;

@Column(name =mnoteheadline)
@Type(type =registeredName)
private String mnotetag;

新的错误日志:

 原因:org.hibernate.MappingException:无法实例化自定义类型:org.jasypt.hibernate.type.EncryptedStringType 
at org.hibernate.type.TypeFactory.custom (TypeFactory.java:218)
at org.hibernate.type.TypeFactory.custom(TypeFactory.java:204)
at org.hibernate.type.TypeFactory.byClass(TypeFactory.java:103)
在org.hibernate.type.TypeResolver.heuristicType(TypeResolver.java:130)
在org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:340)
在org.hibernate。 mapping.SimpleValue.isValid(SimpleValue.java:322)
在org.hibernate.mapping.Property.isValid(Property.java:241)
在org.hibernate.mapping.PersistentClass.validate(PersistentClass。
at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1360)
在org.hibernate.cfg.Config uration.buildSessionFactory(Configuration.java:1851)
在org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
在org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder。 Java的:在org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454 372)

在org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
... 98 more
导致:org.jasypt.exceptions.EncryptionInitializationException:如果未指定encryptorRegisteredName,则password(以及可选的a (org.jasypt.hibernate.type.AbstractEncryptedAsStringType.setParameterValues(AbstractEncryptedAsStringType.java:226)
at org.hibernate.type.TypeFactory.injectParameters(TypeFactory。)中必须指定
。 java:131)
at org.hibernate.type.TypeFactory.custom(TypeFactory.java:214)
... 114 more


解决方案

我认为你的问题是你如何声明你的自定义类型。然而,使用注释来定义类型可以查看文档:
5.1.4.1.1。类型

  @TypeDef(name =registeredName,
defaultForType = org.jasypt.hibernate。 type.EncryptedStringType.class,
typeClass = org.jasypt.hibernate.type.EncryptedStringType.class,
parameters = {
@Parameter(name =algorithm,value =PBEWithMD5AndTripleDES) ,
@Parameter(name =password,value =password),
@Parameter(name =keyObtentionIterations,value =1000)
}

您无法在此使用任何bean。


I am working on a Spring-MVC application which uses Hibernate as an ORM tool. We would like to encrypt some columns and for that I am using Jasypt. Now, for that I have to use the annotation @Type, but it requires that there should be a hibernate.cfg.xml file present. Unfortunately, I am not using hibernate.cfg.xml and my sessionFactory and all other configuration are defined in applicationServletContext.xml and root-context.xml.

These are the types I want to use : Filename : jasyptHibernateTypes.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <!-- VARCHAR, CLOB, TEXT based types -->

    <typedef name="encryptedString" class="org.jasypt.hibernate.type.EncryptedStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedBigDecimalAsString" class="org.jasypt.hibernate.type.EncryptedBigDecimalAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedBigIntegerAsString" class="org.jasypt.hibernate.type.EncryptedBigIntegerAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedBooleanAsString" class="org.jasypt.hibernate.type.EncryptedBooleanAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedByteAsString" class="org.jasypt.hibernate.type.EncryptedByteAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedCalendarAsString" class="org.jasypt.hibernate.type.EncryptedCalendarAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedDateAsString" class="org.jasypt.hibernate.type.EncryptedDateAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedDoubleAsString" class="org.jasypt.hibernate.type.EncryptedDoubleAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedFloatAsString" class="org.jasypt.hibernate.type.EncryptedFloatAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedIntegerAsString" class="org.jasypt.hibernate.type.EncryptedIntegerAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedLongAsString" class="org.jasypt.hibernate.type.EncryptedLongAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedShortAsString" class="org.jasypt.hibernate.type.EncryptedShortAsStringType">
        <param name="encryptorRegisteredName">jasyptHibernateEncryptor</param>
    </typedef>


    <!-- VARBINARY, BLOB based type -->
    <typedef name="encryptedBinary" class="org.jasypt.hibernate.type.EncryptedBinaryType">
        <param name="encryptorRegisteredName">jasyptByteHibernateEncryptor</param>
    </typedef>

    <!-- NUMERIC, NUMBER based types -->
    <typedef name="encryptedBigDecimal" class="org.jasypt.hibernate.type.EncryptedBigDecimalType">
        <param name="encryptorRegisteredName">jasyptBigDecimalHibernateEncryptor</param>
    </typedef>

    <typedef name="encryptedBigInteger" class="org.jasypt.hibernate.type.EncryptedBigIntegerType">
        <param name="encryptorRegisteredName">jasypBigIntegertHibernateEncryptor</param>
    </typedef>



</hibernate-mapping>

Here is my root-context.xml :

<context:component-scan base-package="com.journaldev.spring">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <context:property-placeholder location="classpath:application.properties"/>

    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                destroy-method="close">
        <beans:property name="driverClassName" value="org.postgresql.Driver"/>
        <beans:property name="url"
                        value="jdbc:postgresql://localhost:5432/dbname"/>
        <beans:property name="username" value="postgres"/>
        <beans:property name="password" value="password"/>
        <beans:property name="removeAbandoned" value="true"/>
        <beans:property name="removeAbandonedTimeout" value="20"/>
        <beans:property name="defaultAutoCommit" value="false"/>
    </beans:bean>

    <!-- Hibernate 4 SessionFactory Bean definition -->
    <beans:bean id="hibernate4AnnotatedSessionFactory"
                class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource"/>
        <beans:property name="packagesToScan" value="com.journaldev.spring.model"/>

        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</beans:prop>
                <beans:prop key="hibernate.show_sql">false</beans:prop>
                <!--   <beans:prop key="hibernate.jdbc.batch_size">1000</beans:prop>
                   <beans:prop key="hibernate.order_updates">true</beans:prop>-->
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="cache.use_second_level_cache">true</beans:prop>
                <beans:prop key="cache.use_query_cache">true</beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>

    <beans:bean id="LoginServiceImpl" class="com.journaldev.spring.service.LoginServiceImpl"/>

    <task:annotation-driven/>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory"/>
    </beans:bean>

 <beans:bean id="stringEncryptor"  class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor" lazy-init="false">
        <beans:property name="algorithm" value="PBEWithMD5AndDES" />
        <beans:property name="password" value="password" />
    </beans:bean>

    <beans:bean id="hibernateEncryptor" class="org.jasypt.hibernate.encryptor.HibernatePBEStringEncryptor" lazy-init="false">
        <!-- This property value must match "encryptorRegisteredName" used when defining hibernate user types -->
        <beans:property name="registeredName" value="jasyptHibernateEncryptor" />
        <beans:property name="encryptor" ref="stringEncryptor" />
    </beans:bean>

As you can see, my major config is in this file, and I have also put the interceptors here. I am getting this error :

Caused by: org.hibernate.MappingException: Could not determine type for: encryptedString
    at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:516)
    at org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:42)
    at org.hibernate.cfg.Configuration.processSecondPassesOfType(Configuration.java:1472)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1420)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ... 98 more
Caused by: org.hibernate.annotations.common.reflection.ClassLoadingException: Unable to load Class [encryptedString]
    at org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl.classForName(StandardClassLoaderDelegateImpl.java:60)
    at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:497)
    ... 108 more
Caused by: java.lang.ClassNotFoundException: encryptedString
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.hibernate.annotations.common.util.StandardClassLoaderDelegateImpl.classForName(StandardClassLoaderDelegateImpl.java:57)
    ... 109 more

Model class:

 @Column(name = "mnotetext")
    @Type(type="encryptedString")
    private String mnotetext;

    @Column(name = "mnoteheadline")
    @Type(type="encryptedString")
    private String mnotetag;

What should I do to use the types without hibernate.cfg.xml. How to instruct hibernate that they are in this xml file. Thanks a lot. :-)

Update

Model class :

@TypeDef( name = "registeredName",
        defaultForType = org.jasypt.hibernate.type.EncryptedStringType.class,
        typeClass = org.jasypt.hibernate.type.EncryptedStringType.class)
@Entity
@Table(name = "groupnotes")
public class GroupNotes implements Serializable{
 @Column(name = "mnotetext")
    @Type(type="registeredName")
    private String mnotetext;

    @Column(name = "mnoteheadline")
    @Type(type="registeredName")
    private String mnotetag;
}

New error log :

Caused by: org.hibernate.MappingException: Unable to instantiate custom type: org.jasypt.hibernate.type.EncryptedStringType
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:218)
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:204)
    at org.hibernate.type.TypeFactory.byClass(TypeFactory.java:103)
    at org.hibernate.type.TypeResolver.heuristicType(TypeResolver.java:130)
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:340)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:322)
    at org.hibernate.mapping.Property.isValid(Property.java:241)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:496)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1360)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1851)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
    ... 98 more
Caused by: org.jasypt.exceptions.EncryptionInitializationException: If "encryptorRegisteredName" is not specified, then "password" (and optionally "algorithm" and "keyObtentionIterations") must be specified
    at org.jasypt.hibernate.type.AbstractEncryptedAsStringType.setParameterValues(AbstractEncryptedAsStringType.java:226)
    at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:131)
    at org.hibernate.type.TypeFactory.custom(TypeFactory.java:214)
    ... 114 more

解决方案

I think your problem is how you declare your custom type. However it's possible to define type using annotations take a look at the documentation: 5.1.4.1.1. Type

@TypeDef( name = "registeredName",
    defaultForType = org.jasypt.hibernate.type.EncryptedStringType.class,
    typeClass = org.jasypt.hibernate.type.EncryptedStringType.class,
    parameters = {
        @Parameter(name="algorithm", value="PBEWithMD5AndTripleDES"),
        @Parameter(name="password", value="password"),
        @Parameter(name="keyObtentionIterations", value="1000")
    }
)

You can't use any bean in this.

这篇关于Spring:使用没有hibernate.cgf.xml的Hibernate类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆