Eel*_*lke 8 java postgresql jpa jodatime eclipselink
我试图将带有JPA的JodaTime DateTime字段保存到PostgreSQL,但是遇到了对数据库NULL值的空指针的麻烦.
我正在使用NetBeans 7 beta 2 IDE.持久性实现是EclipseLink 2.2.0,我使用EclipseLink Converter来使映射工作.这是我的领域的声明:
@Converter(
name="dateTimeConverter",
converterClass=ejb.util.DateTimeConverter.class
)
@Column(columnDefinition="TIMESTAMP WITH TIME ZONE")
@Convert("dateTimeConverter")
private DateTime testdate;
Run Code Online (Sandbox Code Playgroud)
转换器类:
public class DateTimeConverter implements Converter {
private Logger log;
private static final long serialVersionUID = 1L;
@Override
public Object convertObjectValueToDataValue(Object o, Session sn) {
if (o == null) {
log.info("convertObjectValueToDataValue returning null");
return null;
}
return ((DateTime)o).toDate();
}
@Override
public Object convertDataValueToObjectValue(Object o, Session sn) {
if (o == null) {
log.info("convertDataValueToObjectValue returning null");
return null;
}
return new DateTime(o);
}
@Override
public boolean isMutable() {
return true;
}
@Override
public void initialize(DatabaseMapping dm, Session sn) {
log = Logger.getLogger("ejb.util.DateTimeConverter");
}
}
Run Code Online (Sandbox Code Playgroud)
只要有实际的DateTime设置,这就可以正常工作.但是一旦没有设置,EclipseLink似乎就会假设一个字符串类型,并且postgresql开始抱怨类型字符的值变化.我假设这是因为转换器类返回空指针而不是日期对象,而EclipseLink则返回默认值.
有没有办法让这个工作没有切换到普通的java.util.Date?
使用a时@Converter,EclipseLink不知道类型,因此您需要初始化它.
在您的initialize(DatabaseMapping dm, Session sn)方法中,您需要设置类型,
dm.setFieldClassification(java.sql.Date.class);
// or, dm.setFieldClassification(java.sql.Timestamp.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3734 次 |
| 最近记录: |