JPA – Hibernate –包级别的类型映射

本文介绍了如何在JPA中使用Hibernate进行自定义类型映射,特别是针对Joda Money的映射。通过@TypeDefs和@TypeDef注解,可以在包级别定义类型映射,避免在每个属性上重复注解。文中还提到,对于使用Joda Money的映射,可能需要定义默认货币,并推荐查看Jadira User Types项目以获取更多信息。
摘要由CSDN通过智能技术生成

当我们最终成熟到可以在JPA中使用某些自定义类型映射时,我们通常会停留在某些提供程序特定的解决方案上,因为JPA本身并未定义任何实现此功能的机制。 让我为您展示一个JPA提供程序Hibernate的自定义类型映射定义的示例。 假设我们在项目中使用Joda Money ,并拥有一个属性为Money的实体。 Jadira – User Types项目已经提供了非常不错的Money类型映射实现。 我们要做的就是让Hibernate知道我们要使用特定的类型映射。 当您查看Hibernate Docs, 第5.1.4.1.1节:Type时 ,您会发现从最简单的方法开始的几种可能性–在每个具有Money类型的属性上使用@Type批注。 如果您在域映射中只有一个或很少一个这种类型的属性,则此选择可能很好。 很有可能早一点
或以后,当您的项目足够增长时,将会有越来越多的项目,并且最终会出现许多类似的行,它们定义了相同的类型映射。 如果您不喜欢重复自己的动作,或者您不信任徒弟进行的重构,则应该考虑使用另一种方式,使用@TypeDefs@TypeDef批注。 您可能会在Hibernate文档中阅读到:

“这些注释可以放在类或包级别。”

让我们关注第二个选项-包级别。 我们将这些注释放置package-info.java中,用于存放包的域实体(请参阅: Java语言规范– 7.4.1。命名包 )。 它看起来像这样:

/**
 * Provides the domain model.
 *
 * @author Warlock
 */
@org.hibernate.annotations.TypeDef(name = "money", defaultForType = Money.class, typeClass = PersistentMoneyAmount.class)
package com.blogspot.vardlokkur.domain;

import org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmount;
import org.joda.money.Money;

现在,当您使用Money类型映射属性时,无需附加类型映射规范即可进行操作,如下所示:

package com.blogspot.vardlokkur.domain;
 
...
import org.joda.money.Money;
 
@Entity
@Table(name = "EMPLOYEE")
public class Employee implements Serializable {
 
...
@Column(name = "SALARY")
private Money salary;
 
...
 
}

一个技术说明,在成为快乐的Money映射用户之前–由于PersistentMoneyAmount使用单个列(持有金额)进行Money映射,因此需要定义将与金额一起使用的货币。 可以将默认货币定义为持久性单元属性: jadira.usertype.currencyCode

PS。 不要将上述Money示例作为Joda Money映射的准则,可能有更好的方法,请参阅Jadira User Types博客

甜点的几个链接:


翻译自: https://www.javacodegeeks.com/2013/04/jpa-hibernate-type-mapping-on-package-level.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值