Spring:使用没有hibernate.cgf.xml的Hibernate类型 [英] Spring : Use Hibernate types without hibernate.cgf.xml
问题描述
我正在使用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屋!