Sobes.tech
Senior

Qual è la differenza tra JSON e JSONB in PostgreSQL? Problemi con Hibernate e campi JSON

sobes.tech AI

Risposta dell'AI

In PostgreSQL, i tipi JSON e JSONB memorizzano entrambi i dati in formato JSON, ma differiscono nella rappresentazione interna:

  • JSON: memorizza i dati come testo, preservando il formato originale, inclusi spazi e ordine delle chiavi.
  • JSONB: formato binario, che viene indicizzato ed è ottimizzato per ricerche rapide e operazioni sui dati.

JSONB è generalmente preferibile per query e indicizzazione, anche se occupa un po' più di spazio durante la scrittura.

Il problema con Hibernate e i campi JSON è che Hibernate non ha supporto integrato per i tipi JSON/JSONB di PostgreSQL. Per lavorarci, si usano spesso tipi utente personalizzati o librerie come Hibernate Types, che permettono di mappare i campi JSON a oggetti Kotlin/Java.

Esempio di un UserType personalizzato per JSONB:

@TypeDef(name = "jsonb", typeClass = JsonBinaryType::class)
@Entity
class MyEntity(
    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    val data: Map<String, Any>
)

Senza questo supporto, Hibernate può salvare JSON come stringa, riducendo efficienza e praticità d'uso.