PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kelas Model JPA untuk bidang TIMESTAMP TANPA ZONA WAKTU DEFAULT CURRENT_TIMESTAMP di Postgres?

Tipe salah

LocalDateTime adalah jenis yang salah di sini. Kelas itu tidak dapat mewakili momen, seperti yang dijelaskan dalam Javadoc-nya.

Kelas itu sengaja tidak memiliki konsep zona waktu atau offset-dari-UTC. Jadi itu mewakili tanggal dan waktu seperti "siang pada 23 Januari 2019", tetapi tidak tahu apakah itu siang di Tokyo, Paris, atau Montréal, misalnya, tiga momen yang sangat berbeda itu adalah beberapa jam terpisah. Jadi tipe ini cocok untuk tipe SQL standar TIMESTAMP WITHOUT TIME ZONEtanpa , bukan dengan .

Untuk diskusi lebih lanjut, lihat:Apa perbedaan antara Instant dan LocalDateTime?

Tipe kanan

Untuk tipe SQL standar TIMESTAMP WITH TIME ZONE , Anda harus menggunakan tipe Java Instant , OffsetDateTime , atau ZonedDateTime . Dari ketiganya, JDBC 4.2 hanya membutuhkan dukungan untuk yang kedua, OffsetDateTime .

Pengambilan.

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

Nilai yang diambil dari Postgres akan selalu dalam UTC. Standar SQL tidak menentukan perilaku ini, sehingga database bervariasi. Di Postgres, nilai apa pun yang dikirim ke bidang jenis TIMESTAMP WITH TIME ZONE disesuaikan dengan UTC. Nilai yang diambil ada dalam UTC.

Menyimpan.

myPreparedStatement.setObject( … , odt ) ;

Sesuaikan dari UTC (offset nol) ke waktu jam dinding yang digunakan oleh orang-orang di wilayah tertentu (zona waktu).

ZoneId z = ZoneId.of( "Asia/Tokyo" ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;

JPA

Saya tidak menggunakan JPA, lebih memilih untuk menjaga hal-hal sederhana.

Tetapi menurut Jawaban ini , JPA 2.2 mendukung java.time jenis.

Hibernasi juga mendukung java.time .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggabungkan kolom dalam SELECT Postgres?

  2. PostgreSQL SALIN keluaran pipa ke gzip dan kemudian ke STDOUT

  3. Pencarian teks lengkap PG di rel menggunakan permata pg_search untuk substring

  4. Panggil fungsi dengan tipe komposit sebagai argumen dari kueri asli di jpa

  5. Bagaimana cara menghapus duplikat dalam tabel?