Hibernate注释:在varchar列中存储int

Hibernate注释:在varchar列中存储int,hibernate,hibernate-annotations,Hibernate,Hibernate Annotations,我正在使用Hibernate注释 在我的POJO中,我有一个整型的年份字段 我想将这个值保存在数据库中的char4列中,并让hibernate来回转换类型。我开始研究@Type注释,但如果可能的话,我不想写我自己的自定义类型?如果映射到DB的char4列的POJO字段是access by属性,hibernate将调用其setter和getter进行数据库和POJO之间的映射。因此,转换逻辑可以在该属性的setter和getter内部实现。此外,intDate应该标记为@Transient,以告诉

我正在使用Hibernate注释

在我的POJO中,我有一个整型的年份字段


我想将这个值保存在数据库中的char4列中,并让hibernate来回转换类型。我开始研究@Type注释,但如果可能的话,我不想写我自己的自定义类型?

如果映射到DB的char4列的POJO字段是access by属性,hibernate将调用其setter和getter进行数据库和POJO之间的映射。因此,转换逻辑可以在该属性的setter和getter内部实现。此外,intDate应该标记为@Transient,以告诉hibernate忽略映射此字段

public class TableABC {

    private int id;
    private int intDate;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(length=4) 
    private  String getCharDate() {
        return String.valueOf(this.intDate);
    }

    private void setCharDate(String charDate) {
        try {
            this.intDate = Integer.parseInt(charDate);
        } catch (NumberFormatException e) {
            //Logic to handle when charDate cannot convert to integer 
            this.intDate = 0;
        }
    }

    @Transient
    public int getIntDate() {
        return intDate;
    }

    public void setIntDate(int intDate) {
        this.intDate = intDate;
    }

}

如果映射到DB的char4列的POJO字段是access by属性,则hibernate将调用其setter和getter来进行数据库和POJO之间的映射。因此,转换逻辑可以在该属性的setter和getter内部实现。此外,intDate应该标记为@Transient,以告诉hibernate忽略映射此字段

public class TableABC {

    private int id;
    private int intDate;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(length=4) 
    private  String getCharDate() {
        return String.valueOf(this.intDate);
    }

    private void setCharDate(String charDate) {
        try {
            this.intDate = Integer.parseInt(charDate);
        } catch (NumberFormatException e) {
            //Logic to handle when charDate cannot convert to integer 
            this.intDate = 0;
        }
    }

    @Transient
    public int getIntDate() {
        return intDate;
    }

    public void setIntDate(int intDate) {
        this.intDate = intDate;
    }

}

我对Hibernate源代码进行了快速搜索,我认为没有一种类型可以用于此:

但我鼓励您实现自己的类型,可能是一年类型,因为这并不像听起来那么困难:-


另一个解决方案,在setter中处理转换,也是一个选项,但是如果没有大量的测试和性能度量,我不会这么做

我对Hibernate源代码进行了快速搜索,我认为没有一种类型可以用于此:

但我鼓励您实现自己的类型,可能是一年类型,因为这并不像听起来那么困难:-


另一个解决方案,在setter中处理转换,也是一个选项,但是如果没有大量的测试和性能度量,我不会这么做

谢谢你,我想它能满足我在这里的需要。虽然,我读得越多,自定义类型似乎并不太难,所以也许我以后也会尝试使用该方法。这应该可以让功能启动并运行了。谢谢你,我认为它可以满足我的需要。虽然,我读得越多,自定义类型似乎并不太难,所以也许我以后也会尝试使用该方法。现在应该可以启动并运行该功能。