Cómo persistir una entidad que contiene un campo de tipo de usuario mediante JPA2

StackOverflow https://stackoverflow.com/questions/2492160

  •  21-09-2019
  •  | 
  •  

Pregunta

Estoy buscando una manera de persistir una entidad que contiene un campo de un tipo de usuario. En este ejemplo particular me gustaría persistir el ts campo como el número de milisegundos.

import org.joda.time.DateTime;

@Entity
public class Foo {

  @Id
  private Long id;

  private DateTime ts;
}
¿Fue útil?

Solución

APP no tiene la posibilidad de registrar los tipos de propiedad personalizada, tendrá que utilizar la materia específica del proveedor:

Otros consejos

Dado que el tipo no es una APP definidas y justificadas que se basan en implementaciones específicas. DataNucleus tiene un plugin para JodaTime que permitiría su persistencia deseada.

O se puede usar esas materias específicas del proveedor o se puede hacer uso de @PostPersist, @PostUpdate, métodos de devolución de llamada @PostLoad con un campo sustituta @Transient.

http://www.java2s.com/Tutorial/Java/0355__JPA/ EntityListenerPostLoad.htm le dará una idea.

Por favor, siéntase cómodo para ponerse en contacto para cualquier aclaración adicional.

Una solución es utilizar las propiedades de no-columna y encapsular con getters / setters.

A decir APP que captadores de uso / set en lugar de directamente accediendo campos privados, se debe anotar en @Id pública a largo getId () en lugar de Identificación largo privada . Al hacer esto, sólo recuerde usar @Transient por cada captador que no se corresponde directamente a una columna.

El siguiente ejemplo crearía una columna Date llamado myDate , mientras que la aplicación tendría DateTime GETTS (adoquines) y () métodos disponibles para ello. (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; }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top