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

当我们最终成熟到可以在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博客 。

甜点的几个链接:

  • 在Hibernate中注释自定义类型
  • Jadira用户类型,支持Joda Money

参考: JPA – Hibernate –在Warlock's Thoughts博客上,来自我们JCG合作伙伴 Michal Jastak的程序包级别的类型映射 。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于文件关联的图标不能正常显示

不知道有没有人遇到过这种情况: 这两种情况都是关联的图标不能正常显示,但是可以正常打开。总觉得看着挺碍眼的,就看了下注册表,发现可以用以下方法解决: 打开注册表,[HKEY_CLASSES_ROOT]找到需要修改的文件…

web前端常用知识点

1、常见的块级元素 内联元素 div -最常用的块级元素 dl - 和dt-dd 搭配使用的块级元素 form - 交互表单 h1 -h6- 大标题 hr - 水平分隔线 ol – 有序列表 p - 段落 ul - 无序列表 fieldset - 表单字段集 colgroup-col - 表单列分组元素 table-tr-td 表格及行-单元格 pre - 格…

Android 7.0 fiddler代理抓不到https请求的解决办法

Android 7.0 fiddler代理抓不到https请求的解决办法 解决方法: 1.在源码res目录下新建xml目录,增加network_security_config.xml文件 (工程名/app/src/main/res/xml/network_security_config.xml)network_security_config.xml文件…

华为畅享8plus停产了吗_牢记华为手机“三不买”原则,不花冤枉钱,选错要吃亏!...

如今华为手机已经占据国内手机市场份额的半壁江山,华为自然也就成为了买手机的首选。那么华为手机真的好吗?我认为应该理性看待,因为每个手机品牌都有好手机也有差手机,其实买华为你只需要牢记“三不买”原则,就可以不…

Spring MVC:MySQL和Hibernate的安全性

Spring有很多不同的模块。 所有这些对于具体目的都是有用的。 今天,我将讨论Spring Security。 该模块提供了灵活的方法来管理访问Web应用程序不同部分的许可。 在这篇文章中,我将研究Spring MVC , Hibernate , MySQL与Spring Sec…

Python 离线 安装requests第三方库

一、介绍 requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,不过requests的优势在于使用简单,相同一个功能,用requests实现起来代码量要少很多。毕竟官方文档都很直白的说: python的标准库urllib2…

JS分页条插件

目标 制作js分页导航jq插件,用于无刷新分页或者刷新分页 实现目标参考京东和天猫的分页条. 有四个固定按钮,前页码,后页码,首页,末页. 程序关键点在于计算中间页面的起止位置.逻辑是以当前页码为参照点,根据需要显示的页码按钮个数,计算参照点前后的页码数量. 当起止点小于1或者…

头同尾合十的算法_乘法速算之首同尾合十

两位数乘两位数中,有一种特殊情况不需要列竖式,可以直接说出答案,那就是“首同尾合十”——十位相同,个位数字之和是10。一、巧算方法前两位:十位数字(十位数字1),后两位:个位相乘例如&#xff…

Bootstrap定制开发

Bootstrap作为目前很受欢迎的前端框架,越来越多的网站开始使用基于Bootstrap框架进行开发。 1、定制开发方法 (1)Bootstrap定制开发可以使用LESS和Grunt实现定制化 (2)在线实现定制化开发,地址为&#x…

JavaFX逆运动学库2.0

这是第一篇讲解javafx-ik的基础教程, javafx-ik是JavaFX的逆运动学库。 该库的源代码可以从GitHub下载。 什么是 图1:单骨 骨骼是使用javafx-ik库进行逆运动学的基本基础。 骨骼具有一定长度和关节,骨骼可以围绕该关节旋转。 具有关节的一端…

html权重值_史上最全的web前端面试题汇总及答案HtmlCss(二)

作者:樱桃小丸子儿链接:https://www.jianshu.com/p/abadcc84e2a4HTML&CSSimg的alt和title的异同?**alt **是图片加载失败时,显示在网页上的替代文字;**title **是鼠标放上面时显示的文字,title是对图片的描述与进一…

解决问题SyntaxError: Unexpected token import

ES6语法的模块导入导出(import/export)功能,我们在使用它的时候,可能会报错: SyntaxError: Unexpected token import 语法错误:此处不应该出现import 我遇到的情况是import语法不识别导致的。在这里,有两种方法可以解决。 1: 使用…

linux下添加用户并赋予root权限

1、添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户#passwd tommy //修改密码Changing password for user tommy.New UNIX password: //在这里输入新密码Retype new UNIX password: …

CSS定位机制

css定位机制和css动画变换 css定位机制 定位属性position(相生相克) 1 static:静态定位 2 relative:相对定位(相对于自己原来的位置定位) 3. absolute:绝对定位(float)…

使用Gradle的简单Spring MVC Web应用程序

除了我们现在将使用Spring MVC而不是原始servlet之外,该文章将与我们以前的文章Simple Gradle Web Application相似。 使用Gradle运行基本的Spring MVC应用程序确实很容易。 您可以在Github上下载本教程的源代码。 先决条件 安装Gradle 我们的基本项目结构将是&am…

tps波动很大的原因_花生价格小幅上涨,要突破6元大关?粮贩:还有很大距离...

花生是一种重要的油料作物,虽然并不是全国都种植,但在黄淮、长江流域,西北和东北等地区,均广泛种植,近期花生价格一直是农民朋友的关注点,从今年花生价格来看,自从花生上市后,价格起…

python—内置函数-字符串,eval,isinstance

eval() 功能:将字符串str当成有效的表达式来求值并返回计算结果。 语法: eval(source[, globals[, locals]]) -> value 参数: source:一个Python表达式或函数compile()返回的代码对象 globals:可选。必须是dictiona…

html css 基础(标签选择,分页,行和块元素)

&#xff08;1&#xff09;html标签选择 1、<a></a> 的功能有连接&#xff0c;下载&#xff0c;锚点 2、<span></span> 用来区分字体样式&#xff0c;<strong></strong>和<em></em>用来强调某段文字 3、如果是描述性的某段…

正确退出activity_如何退出Activity

如何退出Activity&#xff1f;如何安全退出已调用多个Activity的Application&#xff1f;对于单一Activity的应用来说&#xff0c;退出很简单&#xff0c;直接finish()即可。当然&#xff0c;也可以用killProcess()和System.exit()这样的方法。但是&#xff0c;对于多Activity的…

win主机ping不通linux的IP

1.虚拟机的中的linux系统设置成桥接模式 2.点击虚拟机的编辑选择虚拟网络编辑器 3.点击更改设置 4点击还原默认设置即可 转载于:https://www.cnblogs.com/yvanBk/p/9156972.html