I'm having the exact same problem. It makes it impossible to have DRY code when you have to do type mapping on every single usage. Furthermore if you've created a type that constrains the scale or precision of a type, you shouldn't need to add a @Column annotation and redundantly specify this.
Consider this case:
I have a custom UserType called Yield which extends BigDecimal but has a validate() method to ensure that the scale is <= 4 and precision is <=8. Then I have a YieldUserType object that handles implementing UserType.
To use this type I'd need the following annotations applied to all members of type Yield even though it's redundant.
Code:
@Column(scale = 4, precision = 8)
@Type(type = "org.hibernate.type.BigDecimalType")
private Yield escrowYield;
@Column(scale = 4, precision = 8)
@Type(type = "org.hibernate.type.BigDecimalType")
private Yield brokerYield;
@Column(scale = 4, precision = 8)
@Type(type = "org.hibernate.type.BigDecimalType")
private Yield instrumentYield;
It seems like some kind of conversion strategy enhancement would be a good solution where you essentially map concrete custom types to usertypes and ideally provide @Column defaults. The documentation even refers to "conversion strategies" on this page:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html#mapping-types-custom however there is no further mention of what this is.
Does anyone know of anything like this already in hibernate?