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

anotasi hibernasi yang tepat untuk byte[]

Apa cara portabel untuk membubuhi keterangan properti byte[]?

Itu tergantung pada apa yang Anda inginkan. JPA dapat mempertahankan byte[] yang tidak beranotasi . Dari spesifikasi JPA 2.0:

11.1.6 Anotasi Dasar

Basic anotasi adalah jenis pemetaan paling sederhana ke kolom database. Basic anotasi dapat diterapkan ke properti persisten atau variabel instan dari salah satu tipe berikut:Java primitif, tipe, pembungkus tipe primitif,java.lang.String ,java.math.BigInteger ,java.math.BigDecimal ,java.util.Date ,java.util.Calendar , java.sql.Date ,java.sql.Time , java.sql.Timestamp ,byte[] , Byte[] , char[] , Character[] , enums, dan semua tipe lain yang mengimplementasikan Serializable .Seperti yang dijelaskan dalam Bagian 2.8, penggunaan Basic anotasi adalah opsional untuk bidang dan properti persisten dari jenis ini. Jika Anotasi Dasar tidak ditentukan untuk bidang atau properti tersebut, nilai default anotasi Dasar akan berlaku.

Dan Hibernate akan memetakannya "secara default" ke VARBINARY SQL (atau SQL LONGVARBINARY tergantung pada Column size?) yang ditangani PostgreSQL dengan bytea .

Tetapi jika Anda menginginkan byte[] untuk disimpan dalam Objek Besar, Anda harus menggunakan @Lob . Dari spesifikasi:

11.1.24 Anotasi Lob

Sebuah Lob anotasi menetapkan bahwa properti atau bidang persisten harus dipertahankan sebagai objek besar ke jenis objek besar yang didukung basis data. Aplikasi portabel harus menggunakan Lob anotasi saat memetakan ke basis data Lob Tipe. Lob anotasidapat digunakan bersama dengan anotasi Dasar atau denganElementCollection anotasi ketika nilai koleksi elemen adalah tipe dasar. Sebuah Lob dapat berupa tipe orcharacter biner. Lob type disimpulkan dari jenis bidang atau properti yang persisten dan, kecuali untuk tipe string dan karakter, defaultnya adalah Blob.

Dan Hibernate akan memetakannya ke BLOB SQL yang ditangani PostgreSQL dengan oid .

Apakah ini diperbaiki di beberapa versi hibernasi terbaru?

Nah, masalahnya saya tidak tahu persis apa masalahnya. Tapi setidaknya saya bisa mengatakan bahwa tidak ada yang berubah sejak 3.5.0-Beta-2 (di mana perubahan telah diperkenalkan) di cabang 3.5.x.

Tetapi pemahaman saya tentang masalah seperti HHH-4876, HHH-4617 dan PostgreSQL dan BLOB (disebutkan dalam javadoc dari PostgreSQLDialect ) adalah bahwa Anda seharusnya mengatur properti berikut

hibernate.jdbc.use_streams_for_binary=false

jika Anda ingin menggunakan oid yaitu byte[] dengan @Lob (yang merupakan pemahaman saya sejak VARBINARY bukan yang Anda inginkan dengan Oracle). Apakah Anda mencoba ini?

Sebagai alternatif, HHH-4876 menyarankan penggunaan PrimitiveByteArrayBlobType yang tidak digunakan lagi untuk mendapatkan perilaku lama (sebelum Hibernate 3.5).

Referensi

  • Spesifikasi JPA 2.0
    • Bagian 2.8 "Default Pemetaan untuk Bidang atau Properti Non-Hubungan"
    • Bagian 11.1.6 "Anotasi Dasar"
    • Bagian 11.1.24 "Anotasi Lob"

Sumber daya

  • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4876
  • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4617
  • http://relation.to/Bloggers/PostgreSQLAndBLOBs


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hitung jumlah acara bersamaan dalam SQL

  2. Menyortir elemen array

  3. Masukkan, pada pembaruan duplikat di PostgreSQL?

  4. Alat untuk menghasilkan diagram tabel database dengan PostgreSQL?

  5. Pencocokan partisi tingkat lanjut untuk penggabungan partisi