sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man mappar postgresql tidsstämpel med tidszon i en JPA 2-enhet

Jag fick så småningom detta att "fungera" - på ett hackigt sätt - genom att stänga av schemavalidering.

Tidigare hade jag <property name="hibernate.hbm2ddl.auto" value="validate"/>"hibernate.hbm2ddl.auto" i min persistence.xml. När jag kommenterade den här egenskapen startade min appserver och modellen "fungerade".

Den slutliga formen av min enhet 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 att ha läst en hel del om detta fick jag intrycket att det inte finns något enkelt sätt att kartlägga Postgresql-tidsstämpel med tidszonskolumner.

Vissa JPA-implementering + databaskombinationer stöder detta inbyggt (EclipseLink + Oracle är ett exempel). För viloläge, med jodatime-tillägg, är det möjligt att lagra tidszonsmedvetna tidsstämplar med en normal tidsstämpel + ett varchar-fält för tidszonen (jag kunde inte göra det eftersom jag var tvungen att ändra databasschemat). Jadira-användartyper eller helt anpassade användartyper kan också användas för att lösa detta problem.

Jag måste notera att mitt användningsfall för denna enhet är "skrivskyddat", så jag skulle kunna komma undan med en till synes naiv "lösning".



  1. protokollpaket ur funktion

  2. Du har inte en implicit applikation i omfattning:PlayFramework med Oracle

  3. Välj endast dagens (sedan midnatt) tidsstämplar

  4. Behöver förklaring om teckentyper i PostgreSQL