sql >> データベース >  >> RDS >> PostgreSQL

postgresqlタイムスタンプをJPA2エンティティのタイムゾーンにマッピングする方法

    私は最終的に、スキーマ検証をオフにすることで、この「機能」を(ハック的な方法で)作成しました。

    以前は、<property name="hibernate.hbm2ddl.auto" value="validate"/>"hibernate.hbm2ddl.auto"を使用していました。 私のpersistence.xmlで。このプロパティをコメントアウトすると、アプリサーバーが起動し、モデルが「機能」しました。

    私の実体の最終的な形は次のとおりでした:

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

    これについてかなり読んだ後、Postgresqlのタイムスタンプをタイムゾーンの列にマッピングする簡単な方法はないという印象を受けました。

    一部のJPA実装とデータベースの組み合わせはこれをネイティブにサポートします(EclipseLink + Oracleはその一例です)。 hibernateの場合、jodatime拡張機能を使用すると、通常のタイムスタンプとタイムゾーンのvarcharフィールドを使用してタイムゾーン対応のタイムスタンプを保存できます(データベーススキーマの変更が制限されていたため、これはできませんでした)。 Jadiraユーザータイプ または、完全にカスタムのユーザータイプを使用して、この問題に取り組むこともできます。

    このエンティティのユースケースは「読み取り専用」であることに注意する必要があります。そのため、一見ナイーブな「解決策」で逃げることができます。



    1. Androidを使用してMySQLデータベースに画像を送信する

    2. MySQLはISO8601日時形式を挿入します

    3. NULL以外の値をパーティション内で上に移動

    4. mysql_result()は、パラメーター1がリソースであり、ブール値が指定されていることを想定しています。