PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So ordnen Sie den Postgresql-Zeitstempel der Zeitzone in einer JPA 2-Entität zu

Ich habe es schließlich „funktioniert“ – auf eine hackige Art – indem ich die Schema-Validierung abgeschaltet habe.

Zuvor hatte ich <property name="hibernate.hbm2ddl.auto" value="validate"/>"hibernate.hbm2ddl.auto" in meiner persistence.xml. Als ich diese Eigenschaft auskommentierte, startete mein App-Server und das Modell "funktionierte".

Die endgültige Form meiner Entität war:

@Entity
@Table(schema = "content", name = "theme")
public class Theme extends AbstractBaseEntity {
    private static final long serialVersionUID = 1L;

    @Column(name = "run_from", columnDefinition = "timestamp with time zone not null")
    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    private Date runFrom;

    @Column(name = "run_to", columnDefinition = "timestampt with time zone not null")
    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    private Date runTo;

    /* Getters, setters, .hashCode(), .equals() etc omitted */

Nachdem ich einiges darüber gelesen hatte, hatte ich den Eindruck, dass es keine einfache Möglichkeit gibt, den Postgresql-Zeitstempel den Zeitzonenspalten zuzuordnen.

Einige Kombinationen aus JPA-Implementierung und Datenbank unterstützen dies nativ (EclipseLink + Oracle ist ein Beispiel). Für den Ruhezustand ist es mit Jodatime-Erweiterungen möglich, zeitzonenbewusste Zeitstempel mit einem normalen Zeitstempel + einem Varchar-Feld für die Zeitzone zu speichern (ich konnte das nicht tun, da ich gezwungen war, das Datenbankschema zu ändern). Jadira-Benutzertypen oder vollständig benutzerdefinierte Benutzertypen können ebenfalls verwendet werden, um dieses Problem anzugehen.

Ich muss anmerken, dass mein Anwendungsfall für diese Entität "schreibgeschützt" ist, sodass ich mit einer scheinbar naiven "Lösung" davonkommen könnte.