我必须将我的类定义映射到现有数据库,其中日期字段存储为varchar。
e.g。
class A {
@Column
Date birth;
}
如何对出生属性进行注释,以便将其正确映射到数据库varchar?
谢谢!
答案 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;
}
希望这有帮助。