Suppose that we use Joda Money in our project, and have an entity with property having type Money. There are already pretty nice type mapping implementations for Money, provided by Jadira - User Types project. All we have to do is just let Hibernate know that we want to use specific type mapping.
When you look at the Hibernate Docs, Section 5.1.4.1.1: Type, you'll see few possibilities, starting from the simplest - using @Type annotation on each property having Money type. This choice can be good if you have only one, or very few, properties of this type in your domain mapping. It is very probable that sooner or later, when your project will grow enough, there will be more and more of them, and you end up with many similar lines defining the same type mapping.
If you aren't a big fan of repeating yourself, or you don't trust in refactorings made by your apprentices ;), you should consider another way, using @TypeDefs and @TypeDef annotations.
As you may read in Hibernate documentation: "These annotations can be placed at the class or package level." - Let's focus on the second option - package level.
We will place these annotations in package-info.java for our domain entities holding package (see: Java Language Specification - 7.4.1. Named Packages). It will look like this:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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; | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
... | |
} |
PS. Don't treat the above Money example as the guideline of Joda Money mapping :), there are probably better ways of doing it, see Jadira User Types blog.
Few links for the dessert:
Follow-ups:
This article has been republished on Java Code Geeks (04/09/2013), and on Dzone's Javalobby (04/15/2013).
No comments:
Post a Comment