sql >> Databáze >  >> RDS >> PostgreSQL

Jak mapovat časové razítko postgresql s časovým pásmem v entitě JPA 2

Nakonec jsem to „fungoval“ – trochu hackerským způsobem – vypnutím ověřování schématu.

Dříve jsem měl <property name="hibernate.hbm2ddl.auto" value="validate"/>"hibernate.hbm2ddl.auto" v mém persistence.xml. Když jsem tuto vlastnost okomentoval, můj aplikační server se spustil a model „fungoval“.

Konečná podoba mé entity byla:

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

Po přečtení toho docela dost jsem nabyl dojmu, že neexistuje snadný způsob, jak mapovat časové razítko Postgresql se sloupci časového pásma.

Některé kombinace implementace JPA + databáze to nativně podporují (příkladem je EclipseLink + Oracle). Pro hibernaci s rozšířeními jodatime je možné ukládat časová razítka s vědomím časového pásma pomocí normálního časového razítka + pole varchar pro časové pásmo (nemohl jsem to udělat, protože jsem byl nucen změnit schéma databáze). typy uživatelů Jadira nebo k řešení tohoto problému lze také použít zcela vlastní typy uživatelů.

Musím poznamenat, že můj případ použití pro tuto entitu je „pouze pro čtení“, takže mi může uniknout zdánlivě naivní „řešení“.



  1. Uložit vícerozměrné pole v databázi:relační nebo vícerozměrné?

  2. Chcete-li spustit soubor .sql v MySQL

  3. Chyba MySQL:Seznam SELECT není v klauzuli GROUP BY

  4. Příkaz PostgreSql pro zobrazení dat tabulky