JPA – Hibernate –包级别的类型映射
當(dāng)我們最終成熟到可以在JPA中使用某些自定義類型映射時(shí),我們通常會(huì)停留在某些提供程序特定的解決方案上,因?yàn)镴PA本身并未定義任何實(shí)現(xiàn)此功能的機(jī)制。 讓我為您展示一個(gè)JPA提供程序Hibernate的自定義類型映射定義的示例。 假設(shè)我們?cè)陧?xiàng)目中使用Joda Money ,并擁有一個(gè)屬性為Money的實(shí)體。 Jadira – User Types項(xiàng)目已經(jīng)提供了非常不錯(cuò)的Money類型映射實(shí)現(xiàn)。 我們要做的就是讓Hibernate知道我們要使用特定的類型映射。 當(dāng)您查看Hibernate Docs, 第5.1.4.1.1節(jié):Type時(shí) ,您會(huì)發(fā)現(xiàn)從最簡單的方法開始的幾種可能性–在每個(gè)具有Money類型的屬性上使用@Type批注。 如果您在域映射中只有一個(gè)或很少一個(gè)這種類型的屬性,則此選擇可能很好。 很有可能早一點(diǎn)
或以后,當(dāng)您的項(xiàng)目足夠增長時(shí),將會(huì)有越來越多的項(xiàng)目,并且最終會(huì)出現(xiàn)許多類似的行,它們定義了相同的類型映射。 如果您不喜歡重復(fù)自己的動(dòng)作,或者您不信任徒弟進(jìn)行的重構(gòu),則應(yīng)該考慮使用另一種方式,使用@TypeDefs和@TypeDef批注。 您可能會(huì)在Hibernate文檔中閱讀到:
“這些注釋可以放在類或包級(jí)別。”
讓我們關(guān)注第二個(gè)選項(xiàng)-包級(jí)別。 我們將這些注釋放置在package-info.java中,用于存放包的域?qū)嶓w(請(qǐng)參閱: Java語言規(guī)范– 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;現(xiàn)在,當(dāng)您使用Money類型映射屬性時(shí),無需附加類型映射規(guī)范即可進(jìn)行操作,如下所示:
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;...}一個(gè)技術(shù)說明,在成為快樂的Money映射用戶之前–由于PersistentMoneyAmount使用單個(gè)列(持有金額)進(jìn)行Money映射,因此需要定義將與金額一起使用的貨幣。 可以將默認(rèn)貨幣定義為持久性單元屬性: jadira.usertype.currencyCode
PS。 不要將上述Money示例作為Joda Money映射的準(zhǔn)則,可能有更好的方法,請(qǐng)參閱Jadira User Types博客 。
甜點(diǎn)的幾個(gè)鏈接:
- 在Hibernate中注釋自定義類型
- Jadira用戶類型,支持Joda Money
翻譯自: https://www.javacodegeeks.com/2013/04/jpa-hibernate-type-mapping-on-package-level.html
總結(jié)
以上是生活随笔為你收集整理的JPA – Hibernate –包级别的类型映射的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 定期理财在哪种情况下会亏损?
- 下一篇: 使用jclouds库在Amazon S3