如何在Hibernate中将日期保存为varchar?

时间:2015-12-16 01:06:33

标签: hibernate datetime jpa varchar persist

我必须将我的类定义映射到现有数据库,其中日期字段存储为varchar。

e.g。

class A {
    @Column
    Date birth;
}

如何对出生属性进行注释,以便将其正确映射到数据库varchar?

谢谢!

2 个答案:

答案 0 :(得分:5)

JPA 2.1中引入的属性转换器功能正是针对这种情况。如果您的JPA提供程序符合JPA 2.1规范(对于Hibernate,我相信这是版本> = 4.3),那么您可以按如下方式处理:

class A {
    @Column
    @Convert(converter = DateOfBirthConverter.class)
    private Date dateOfBirth;
}

转换器:

@Converter
public class DateOfBirthConverter implements AttributeConverter {

    @Override
    public String convertToDatabaseColumn(Date dateOfBirth) {
        return new SimpleDateFormat("MM/dd/yyyy").format(dateOfBirth);
    }

    @Override
    public Date convertToEntityAttribute(String dateOfBirth) {
        try{
            return new SimpleDateFormat("MM/dd/yyyy").parse(dateOfBirth);
        }
        catch(ParseException ex){
            return null;
        }
    }
}

答案 1 :(得分:1)

您可以执行以下操作。

class A {
    @Column
    String birth;

    @Transient
    Date dateOfBirth;

    ....
    public void setDateOfBirth(Date date){
        this.dateOfBirth = date;

        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
        birth = df.format(date);
    }
}

根据需要更改日期格式。

我认为最好不要将日期存储在varchar中,因为当您从数据库中检索birth时,您必须手动执行日期格式设置。

您可以随时更改为以下内容。

Class A{
   @Temporal(DATE)
   protected java.util.Date birth;

}

希望这有帮助。