JPA / Hibernate是否支持自定义类型

时间:2014-01-24 17:40:38

标签: hibernate jpa

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]

1 个答案:

答案 0 :(得分:1)

JPA不支持自定义类型,但hibernate支持自定义类型。就其性质而言,自定义类型是特定于供应商的。

这是hibernates自定义类型(AKA用户类型),它方便地有一个钱类型的例子: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch06.html#types-custom-ut