5

我正在从休眠 3 迁移到休眠 4,在休眠 3 中,我注册自定义类型的方式是:

public class AnnotationSessionFactoryBean extends org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean {
private Collection<? extends BasicType> customTypes;

public Collection<? extends BasicType> getCustomTypes() {
    return customTypes;
}

public void setCustomTypes(Collection<? extends BasicType> customTypes) {
    this.customTypes = customTypes;
}

@Override
protected Configuration newConfiguration() throws HibernateException {
    Configuration configuration = super.newConfiguration();
    if (CollectionUtils.hasEntries(customTypes)) {
        for (BasicType customType:customTypes) {
            configuration.registerTypeOverride(customType);
        }
    }
    return configuration;
}}

我现在正在尝试执行相同的操作,但使用休眠 4,我的问题是最好的方法是如何做到这一点?因为我无权使用“org.springframework.orm.hibernate4.LocalSessionFactoryBean”而不是“org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean”时更改配置。

谢谢

4

2 回答 2

3

在您的实体类之一中,按如下方式注释该类:

@TypeDefs({
  @TypeDef(name="type1",typeClass=me.sample.Type1.class),
  @TypeDef(name="type2",typeClass=me.sample.Type2.class)
})

Spring 3.1 将 AnnotationSessionFactoryBean 与 LocalSessionFactoryBean 合并,委托 Hibernate 配置是否使用注解与 XML 连接。

于 2012-12-17T17:01:06.377 回答
3

在 Hibernate 4 中,您LocalSessionFactoryBean无需扩展即可使用:

sessionFactory.getConfiguration().registerTypeOverride(TypeOverride.INSTANCE);

虽然,这将在 Hibernate 5.0 中消失:

注意:这将被 org.hibernate.boot.registry.StandardServiceRegistryBuilder 和 org.hibernate.metamodel.MetadataSources 取代,而不是在 4.0 版本之后,此时此类将被弃用并计划在 5.0 中删除。详见 HHH-6183、HHH-2578 和 HHH-6586

于 2014-02-26T13:47:30.827 回答