hibernate - 在 hibernate 中注册用户类型的属性名称是什么

标签 hibernate usertype hibernate.cfg.xml

根据 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”作为 SuperDuperStringTypegetRegistrationKeys() :

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/

相关文章:

java - "Exception in thread "主要 "org.hibernate.HibernateException: Could not parse configuration: hibernate.cfg.xml"

unit-testing - 单元测试 NHibernate UserTypes

hibernate - 如何在 Hibernate 中全局定义 UserType 的名称?

Java异常被捕获后似乎重新抛出

java - JPA一起保存主键和外键

java - Hibernate 无法读取或写入 org.joda.time.LocalDate

java - 如何修复 my/hibernate.cfg.xml 文件?

hibernate - org.hibernate.MappingException : Unknown entity: pack1. Persoana

java - 即使 child 不在,也能找到 parent

spring - 使用 Spring JPA 和 Hibernate 访问 Session 以启用过滤器