当前位置: 首页 > 面试题库 >

jpa独立的自定义类型映射/替代org.hibernate.annotations.Type和org.hibernate.annotations.TypeDef的javax.persistence.x

寇景明
2023-03-14
问题内容

GameCycle在db中有一个表,其中包含datetype 列number。此列中的值是8位数字,代表一个反日期,例如’
20130301‘。映射到此表上,我有一个类GameCycle,其中包含一个类型为iDate的受保护字段java.util.Date。该字段@Type(type = "inverseDate")使用自定义类型映射标注为“ ”。该类Gamecycle用“ @TypeDef(name = "inverseDate", typeClass = InverseDateType.class)” 注释

import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

@Entity
@TypeDef(name = "inverseDate", typeClass = InverseDateType.class)
@Table(name = "GAMECYCLE")
public class GameCycle implements Comparable<GameCycle>, Serializable
{
    @Type(type = "inverseDate")
    @Column(name = "GC_DATE", nullable = false)
    protected Date iDate = null;
    ...

显然,导入将我绑定为使用hibernate作为html" target="_blank">jpa实现,所以我的问题是:

有没有办法摆脱hibernate注释,并使用纯javax.persistence解决方案进行相同的自定义类型映射?


问题答案:

否。当前版本的JPA规范不支持自定义类型映射。它是将来的JPA 2.1最受欢迎的功能之一。

如果您真的想摆脱特定于Hibernate的注释,您唯一可以做的就是将字段映射为,String并手动执行必要的转换(在getter / setter中)。

但是实际上,几乎每个基于JPA的大型应用程序都使用持久性提供程序的某些特定于实现的功能,因此,我认为在这种情况下避免依赖Hibernate并不重要。



 类似资料:
  • 我正在尝试升级TYPO3 10.4的一个扩展,它为tx_news(Doc)添加了一个自定义类型。 我基于以下示例进行了迁移:Breaking:#87623 类/控制器/NewsController.php 但是当我调试流体模板中的条目时,默认模型仍然使用。 我错过了什么还是有人有一个工作的例子。 谢谢你的帮助。 更新:我想创建一个新的类型,在Georg Ringer的手册中解释 我已经创建了一个小

  • 问题内容: 我有一个带有四列ID,名称,颜色,形状的食用水果。 该表中的条目为: 现在,我将一个实体类Fruit映射到上表。 在我的DAO类中,代码是: 显而易见,在上面的查询中运行将返回3行。 我有一个简单的TO类FruitSearchTO 此TO符合我的查询返回的行。 但是在我的DAO中运行类似: 抛出异常java.lang.ClassCastException:[Ljava.lang.Obj

  • 我试图使用一个自定义类作为的键,如下所示: 但是,g给出了以下错误: 我想,我需要告诉C如何散列类,然而,我不太确定如何做。我怎样才能完成这些任务?

  • 我有一个独立的Gradle插件,其中包括一个自定义任务类型: Gradle公约/build.gradle gradle公约/src/main/groovy/com.example.my-conventions.gradle 我可以从另一个项目中使用插件,但是如何注册?大概是这样的: 项目/构建。格拉德尔 是否可以从自定义插件导出自定义任务?或者我必须使用机制使用自定义任务吗?

  • 问题内容: 事实证明,以下示例在使用mysql 5.x时有效,但是在使用oracle 10g数据库时无效。 有没有一种方法可以定义独立于数据库技术的唯一标识符字段? 我已经在hibernate状态下对此进行了测试,并且只有在使用Oracle时才会发生以下异常: 问题答案: 我已经研究过使用,它的确是更好的选择。它允许JPA实现选择最适合您所使用的数据存储系统的任何东西。

  • 问题内容: 我在使用JPA(Hiberante提供程序)映射自定义集合时遇到问题。例如,当我使用带有属性的对象时 与 在我的ORM文件中,没关系;但是如果我替换 “列表匹配项”; 通过 ,其中 “匹配” 的定义如下: 它产生以下错误: 感谢您的关注! 问题答案: 可以,但是您必须将其称为常见集合之一- 或。 所以: 为什么?例如,因为Hibernate对您的集合进行代理以启用延迟加载。所以它创建,