4

根据休眠文档:第 6.5 节。类型注册表http ://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html

我们可以创建一个新的用户类型并覆盖现有的 hibernate 的基本类型。要使用新的用户类型,我们需要使用(见上面的链接)注册它:

Configuration cfg = ...;
cfg.registerTypeOverride( new SuperDuperStringType() );

但是从来没有在文档中提到我们如何在 hibernate.cfg.xml 中注册它?我不敢相信他们忘记将其添加到 hibernate.cfg.xml 中,有人知道吗?谢谢

4

2 回答 2

4

抱歉,有遗漏。该文档描述了注册表和密钥,但在一定程度上希望用户能够推断出 1+1=2。我会更明确地说明这一点。

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html#types-value-basic描述内置注册密钥。

正如您在该部分中看到的那样,注册表中的默认映射java.lang.String是 to org.hibernate.type.StringType。因此,当 Hibernate 看到其 java 类型为它的属性时,它会使用“注册键”java.lang.String查看此注册表。java.lang.String同样,这都是默认的;如果您愿意,您仍然可以为每个属性提供明确的类型信息。这在文档的其他地方进行了描述。基本上你会使用@Typeor <type/>

如果您希望 Hibernate 在SuperDuperStringType没有提供明确类型信息的任何时候使用您的,您可以使用 "java.lang.String" 作为SuperDuperStringType's getRegistrationKeys()

public class SuperDuperStringType implements BasicType {
    ...

    @Override
    public String[] getRegistrationKeys() {
        // lets use delegation and register ourselves under all of StringType's keys
        return org.hibernate.type.StringType.INSTANCE.getRegistrationKeys();
    }
}

在这种情况下,映射中不需要任何明确的内容。

于 2012-11-12T19:09:31.190 回答
2

看看那个帖子:Mapping A Custom Type In Hibernate

通过以下小的修改,它对我有用:

hibernate-mapping 结束标签的格式错误,它错过了/(斜线)。

从此,它解释了一切。

于 2012-11-12T15:39:31.087 回答