JPA/Hibernate支持自定义类型



JPA/Hibernate支持自定义类型吗?我认为,扩展了bigdecimal,这足以让Hibernate将我的类型视为BigDecimal。情况似乎并非如此。有什么办法可以做这项工作吗?如果可能的话,我宁愿避免使用@embedded和@embeddable。

类型:

public class Money extends BigDecimal {
    public Money(String type) {
        super(type);
    }
}

实体:

@Entity
@Table(name = "Person")
public class Person implements java.io.Serializable {
    private Integer id;
    private Money inPocket;
    @Column(name = "InPocket")
    public Money getInPocket() {
        return inPocket;
    }
    public void setInPocket(Money amount) {
        this.amount = amount;
    }
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id")
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
}

当我尝试此操作时,我会得到以下内容:

日志:

SEVERE: String or binary data would be truncated.

例外消息

org.hibernate.exception.DataException: could not insert: [Person]

JPA不支持自定义类型,但是Hibernate确实可以。从本质上讲,自定义类型是特定于供应商的。

这是Hibernates自定义类型(又称用户类型),它具有货币类型的示例:http://docs.jboss.org/hibernate/orm/4.3/manual/en-en-us/html/ch06.html#types-custom--ut-ut

最新更新