Showing posts with label datetime. Show all posts
Showing posts with label datetime. Show all posts

Tuesday, December 6, 2011

Persist Joda Datetime with Eclipselink

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(){}
}