根据 hibernate 文档:第 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,有人知道吗?
谢谢
最佳答案
抱歉,遗漏了。该文档描述了注册表和 key ,但在一定程度上希望用户能够推断出 1+1=2。我会让它更明确。
http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html#types-value-basic描述内置注册 key 。
正如您在该部分中看到的,注册表中 java.lang.String
的默认映射是到 org.hibernate.type.StringType
.所以当 Hibernate 看到一个 java 类型为 java.lang.String
的属性时它使用 java.lang.String
查看此注册表作为“注册 key ”。同样,这都是默认的;如果您愿意,您仍然可以为每个属性提供明确的类型信息。文档中的其他地方对此进行了描述。基本上你会使用 @Type
或 <type/>
.
如果您希望 Hibernate 使用您的 SuperDuperStringType
任何时候没有提供明确的类型信息,你都可以使用“java.lang.String”作为 SuperDuperStringType
的 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();
}
}
在这种情况下,映射中不需要任何明确的内容。
关于hibernate - 在 hibernate 中注册用户类型的属性名称是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061691/