【问题标题】:How do I get Hibernate to call my custom typedef?如何让 Hibernate 调用我的自定义 typedef?
【发布时间】:2010-09-28 18:38:56
【问题描述】:

我正在尝试定义一个 CompositeUserType 来处理我的 JPA/Hibernate 应用程序中的特定类型。我有一个名为 ApplicationMessageType 的 CompositeUserType,旨在处理我的映射。

根据我的阅读,我应该能够在包含 TypeDef 的域层次结构中创建一个 package-info.java 类。我的看起来像这样:

@TypeDefs({
    @TypeDef(
        defaultForType = ApplicationMessage.class,
        typeClass = ApplicationMessageType.class
    )
})
package mptstp.domain;

import mptstp.domain.messages.ApplicationMessage;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;

如果我理解正确,我在 TypeDef 中使用 defaultForType 参数,每当我尝试保存或加载 ApplicationMessage 时,都应该调用自定义类型代码。

我在 ApplicationMessageType 类中的每个方法上都设置了断点,但没有一个曾经被调用。

有人知道我哪里出错了吗?代码可以编译,但似乎从未调用 TypeDef 注释来注册 ApplicationMessageType。

任何指针将不胜感激......

谢谢

【问题讨论】:

    标签: hibernate annotations typedef hibernate-annotations


    【解决方案1】:

    我正在尝试定义一个 CompositeUserType 来处理我的 JPA/Hibernate 应用程序中的特定类型。我有一个名为 ApplicationMessageType 的 CompositeUserType,旨在处理我的映射。

    请记住,您必须为您的复合用户类型在字段或属性级别声明列(使用@Columns 注释)。

    根据我的阅读,我应该能够在包含TypeDefs 的域层次结构中创建一个package-info.java 类。

    这是正确的,这是在多个实体中使用自定义类型时推荐的策略。

    如果我理解正确,我在 TypeDef 中使用 defaultForType 参数这一事实,每当我尝试保存或加载 ApplicationMessage 时,都应该调用自定义类型代码。

    理论上,defaultForType元素意味着当Hibernate遇到ApplicationMessage类的属性时,它应该将持久化策略委托给自定义映射类型ApplicationMessageType

    但是我确定这如何与复合用户类型一起使用,我不确定您是否必须重复 @Type 来声明 @Columns(在这种情况下,您应该声明 @ TypeDef中的987654331@别名)。

    有人知道我哪里出错了吗?代码可以编译,但似乎从未调用 TypeDef 注释来注册 ApplicationMessageType..

    不能说。您是否真的成功地持久化了一个具有ApplicationMessage 类属性的实体,或者根本没有?也许显示一个带注释的实体。

    参考

    资源

    【讨论】:

      猜你喜欢
      • 2015-01-12
      • 2018-08-28
      • 2020-01-19
      • 2012-12-06
      • 1970-01-01
      • 2018-08-18
      • 2010-12-26
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多