Una solución es utilizar propiedades que no sean columnas y encapsularlas con getters/setters.
A decir APP utilizar métodos get/set en lugar de directamente accediendo campos privados, se debe anotar en @Id pública a largo getId() en lugar deIdentificación largo privada. Al hacer esto, simplemente recuerde utilizar @Transient para cada getter que no corresponda directamente a una columna.
El siguiente ejemplo crearía una columna de fecha denominada myDate, mientras que la aplicación tendría los métodos DateTime getTs() y setTs() disponibles para ella. (No estoy seguro sobre el API DateTime, así que por favor, perdona errores menores :))
import org.joda.time.DateTime;
@Entity
public class Foo {
private Long id;
private DateTime ts;
@Id
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
// These should be accessed only by JPA, not by your application;
// hence they are marked as protected
protected Date getMyDate() { return ts == null ? null : ts.toDate(); }
protected void setMyDate(Date myDate) {
ts = myDate == null ? null : new DateTime(myDate);
}
// These are to be used by your application, but not by JPA;
// hence the getter is transient (if it's not, JPA will
// try to create a column for it)
@Transient
public DateTime getTs() { return ts; }
public void setTs(DateTime ts) { this.ts = ts; }
}
increíble que no se acumulan en los adaptadores como lo hicieron en JAXB: DateAdapter clase pública se extiende XmlAdapter {... –