所以我想总是使用我自己的自定义类型来扩展Hibernate StringType
(也执行修剪和大写)。但是我有一些关于如何注册它的问题因此总是使用它而不是默认的StringType
,因为我不想在每个String上放置@Type
注释。
当我只使用Hibernate时,我知道我可以使用registerTypeOverride
或hbm.cfg.xml
在配置中注册它,但是如何在将Hibernate与JPA2结合使用时实现这一点? (注意:我知道@pavertor在jpa 2.1中有auto = true,但我必须使用的AS不支持JPA2.1)
答案 0 :(得分:0)
Hibernate提供了可用于此的Integrator
接口。例如:
public class CustomUserTypesIntegrator implements Integrator {
public void integrate(Configuration configuration,
SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// Register the custom user type mapping(s) with Hibernate.
CustomUserType customUserType = new CustomUserType();
configuration.registerTypeOverride(customUserType,
new String[] { customUserType.returnedClass().getName() });
}
public void integrate(MetadataImplementor metadata,
SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// Nothing to do here.
}
public void disintegrate(SessionFactoryImplementor sessionFactory,
SessionFactoryServiceRegistry serviceRegistry) {
// Nothing to do here.
}
}
然后需要通过Java的标准SPI机制将其公开为Service Provider来注册。例如:
my-project/
src/main/resources/
META-INF/
services/
org.hibernate.integrator.spi.Integrator
其中包含以下内容:
com.example.CustomUserTypesIntegrator
有关此问题的参考,我建议您查看Jadira Usertype library如何执行此操作:https://github.com/JadiraOrg/jadira/。特别是,我发现他们的AbstractUserTypeHibernateIntegrator
课程值得一看。