sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan kortlægges postgresql-tidsstempel med tidszone i en JPA 2-entitet

Til sidst fik jeg dette til at "virke" - på en slags hackish måde - ved at slå skemavalidering fra.

Tidligere havde jeg <property name="hibernate.hbm2ddl.auto" value="validate"/>"hibernate.hbm2ddl.auto" i min persistence.xml. Da jeg kommenterede denne egenskab, startede min app-server, og modellen "virkede".

Den endelige form for min enhed var:

@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 */

Efter at have læst en del om dette, fik jeg det indtryk, at der ikke er nogen nem måde at kortlægge Postgresql-tidsstempel med tidszonekolonner.

Nogle JPA-implementering + databasekombinationer understøtter dette indbygget (EclipseLink + Oracle er et eksempel). For dvaletilstand, med jodatime-udvidelser, er det muligt at gemme tidszonebevidste tidsstempler ved hjælp af et normalt tidsstempel + et varchar-felt for tidszonen (det kunne jeg ikke gøre, da jeg var forhindret i at ændre databaseskemaet). Jadira-brugertyper eller helt tilpassede brugertyper kan også bruges til at løse dette problem.

Jeg skal bemærke, at min use-case for denne enhed er "read only", så jeg kunne slippe afsted med en tilsyneladende naiv "løsning".



  1. ORA-00911:ugyldigt tegn

  2. Sådan vælger du Top N rækker pr. gruppe i MySQL

  3. Sådan indstilles startværdien manuelt som 1000 i MySQL

  4. SQLite og database initialisering