We have to create an encoder
import java.sql.Timestamp;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.mappings.converters.Converter;
import org.eclipse.persistence.sessions.Session;
import org.joda.time.DateTime;
public class JodaDateTimeConverter implements Converter {
private static final long serialVersionUID = 1L;
@Override
public Object convertDataValueToObjectValue(Object dataValue, Session session) {
return dataValue == null ? null : new DateTime((Timestamp) dataValue);
}
@Override
public Object convertObjectValueToDataValue(Object objectValue, Session session) {
return objectValue == null ? null : new Timestamp(((DateTime) objectValue).getMillis());
}
@Override
public void initialize(DatabaseMapping mapping, Session session) {
}
@Override
public boolean isMutable() {
return false;
}
}
Then the encoder can be used to annotate the fields:
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@Entity
public class DateToRemember {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@Column(columnDefinition = "TIMESTAMP")
@Converter(name = "dateTimeConverter", converterClass = net.xan.taskstack.JodaDateTimeConverter.class)
@Convert("dateTimeConverter")
private DateTime date;
}
Or the classic version:
@Entity
public class DateToRemember {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@Column(columnDefinition = "TIMESTAMP")
@Converter(name = "dateTimeConverter", converterClass = net.xan.taskstack.JodaDateTimeConverter.class)
@Convert("dateTimeConverter")
private DateTime date;
public int getId(){return id;}
public DateTime getDate(){return date;}
public void setId(int id ){ this.id = id;}
public void setDate(DateTime date ){ this.date = date;}
public DateToRemember(){}
}