OpenJPA 会持久保存类型为 java.sql.Date、java.sql.Time 或 java.sql.Timestamp 且包含 javax.persistence.Temporal 注释的属性的字段,而 EclipseLink 抛出异常。
该规则将扫描以查找不需要转换数据而且必须移除 Temporal 注释以避免 EclipseLink 错误的以下注释属性组合:
java.sql.Date 属性上的 javax.persistence.Temporal(TemporalType.DATE) 注释java.sql.Date 属性上的 javax.persistence.Temporal(TemporalType.TIME) 注释java.sql.Time 属性上的 javax.persistence.Temporal(TemporalType.DATE) 注释java.sql.Time 属性上的 javax.persistence.Temporal(TemporalType.TIME) 注释java.sql.Time 属性上的 javax.persistence.Temporal(TemporalType.TIMESTAMP) 注释
java.sql.Timestamp 属性上的 javax.persistence.Temporal(TemporalType.TIMESTAMP) 注释对于需要转换器类来更改数据库与实体对象之间的数据的情况,请参阅针对某些 java.sql 属性将 Temporal 注释替换为 Converter 规则。
在以下示例中,该规则将标记所有情况下的 @javax.persistence.Temporal 注释。
@javax.persistence.Temporal(TemporalType。DATE) private java.sql.Date dateDate; @javax.persistence.Temporal(TemporalType。TIME) private java.sql.Date dateTime; @javax.persistence.Temporal(TemporalType。DATE) private java.sql.Time timeDate; @javax.persistence.Temporal(TemporalType。TIME) private java.sql.Time timeTime; @javax.persistence.Temporal(TemporalType。TIMESTAMP) private java.sql.Time timeTimestamp; @javax.persistence.Temporal(TemporalType。TIMESTAMP) private java.sql.Timestamp timestampTimestamp;
自动修复将删除时态注释。
private java.sql.Date dateDate; private java.sql.Date dateTime; private java.sql.Time timeDate; private java.sql.Time timeTime; private java.sql.Time timeTimestamp; private java.sql.Timestamp timestampTimestamp;
有关此问题和其他 OpenJPA 到 EclipseLink 迁移问题的信息,请参阅 OpenJPA to EclipseLink JPA Migration: Mappings 指南。