Frage

Ich bin auf der Suche nach einer Möglichkeit, ein Unternehmen zu bestehen, die ein Feld eines Benutzertypen enthält. In diesem speziellen Beispiel würde Ich mag die ts Feld als Anzahl von Millisekunden anhalten.

import org.joda.time.DateTime;

@Entity
public class Foo {

  @Id
  private Long id;

  private DateTime ts;
}
War es hilfreich?

Lösung

JPA nicht die Möglichkeit haben, individuelle Immobilienarten zu registrieren, finden Sie Anbieter spezielle Sachen verwenden müssen:

Andere Tipps

Da es kein JPA definiert unterstützten Typ verlassen Sie sich auf die Umsetzung Besonderheiten. Datanucleus hat ein Plugin für JodaTime, die Ihre gewünschte Persistenz erlauben würde.

Sie können entweder diese Anbieter bestimmte Stoffe verwenden, oder Sie können von @PostPersist, @PostUpdate, @PostLoad Callback-Methoden mit einem Surrogat @Transient Feld machen.

http://www.java2s.com/Tutorial/Java/0355__JPA/ EntityListenerPostLoad.htm wird Ihnen eine Vorstellung geben.

Bitte fühlen Sie sich bequem in Kontakt für weitere Auskünfte zu erhalten.

Eine Lösung ist nicht-Spalteneigenschaften zu verwenden und kapseln sie mit Getter / Setter.

sagen JPA zu verwenden Getter / Setter statt direkt accesing private Felder, müssen Sie annotate @Id auf public Lange getId () anstelle von Privat Lange id . Wenn dies zu tun, nur nicht vergessen @Transient für jeden Getter zu verwenden, die nicht direkt an einer Säule entspricht.

Das folgende Beispiel würde eine Datumsspalte erstellen namens myDate , während die Anwendung Datetime getTs haben würde () und setts () Methoden, die für sie. (Nicht sicher über Datetime-API, so bitte vergib kleinere Fehler:))

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; }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top