Omet navegació

8.4 - Inserció, modificació i esborrat d'objectes

En totes aquestes operacions d'actualització, recordem que farà falta posar-les en una transacció per a que tinguen efecte.

Inserció

Nota

A partir de la versió 6.0 d'Hibernate, save() està deprecated, en favor de persist()

Es fa amb els mètodes save() o persist() de la sessió, passant-li l'objecte que volem guardar. Posem el mateix exemple de l'apartat 8.1, el d'inserir una comarca. Copieu l'exemple en un fitxer anomenat Exemple_11_Insercio.kt :

package exemples

import classes.Comarca
import org.hibernate.cfg.Configuration
import java.util.logging.Level
import java.util.logging.LogManager

fun main(args: Array<String>) {
    LogManager.getLogManager().getLogger("").setLevel(Level.SEVERE)
    val sessio = Configuration().configure().buildSessionFactory().openSession()
    val t = sessio.beginTransaction ()
    val com = Comarca()

    com.nomC = "Columbretes"
    com.provincia = "Castelló"

    sessio.persist(com)

    t.commit()
    sessio.close()
}

 Podem comprovar en la taula com apareix la comarca que acabem d'introduir:

I evidentment ho podríem comprovar des de DBeaver

Esborrat

Nota

A partir de la versió 6.0 d'Hibernate, delete() està deprecated, en favor de remove()

Amb els mètodes delete o remove, passant-li com a paràmetre l'objecte. Prèviament s'ha d'haver carregar l'objecte amb els mètodes load() get(). Copieu el següent exemple en el fitxer Exemple_12_Esborrat.kt:

package exemples

import org.hibernate.cfg.Configuration
import java.util.logging.Level
import java.util.logging.LogManager

fun main(args: Array<String>) {
    LogManager.getLogManager().getLogger("").setLevel(Level.SEVERE)
    val sessio = Configuration().configure().buildSessionFactory().openSession()
    val t = sessio.beginTransaction()
    val com = sessio.get("classes.Comarca", "Columbretes")

    sessio.remove(com)

    t.commit()
    sessio.close()
}

 

Modificació

Nota

A partir de la versió 6.0 d'Hibernate, update() està deprecated, en favor de merge()

Amb el mètode update() o merge(), passant-li com a paràmetre l'objecte. Prèviament haurà d'haver estat carregat amb els mètodes load()get(), igual que en el cas d'esborrar.

En el següent exemple estem canviant la província del Camp de Morvedre. Per a que no tinga efecte aquest canvi, i no modificar les dades que està utilitzant la resta de companys, observeu com al final estem fent un rollback. Copieu el següent en el fitxer Exemple_13_Modificacio.kt :

package exemples

import classes.Comarca
import org.hibernate.cfg.Configuration
import java.util.logging.Level
import java.util.logging.LogManager

fun main(args: Array<String>) {
    LogManager.getLogManager().getLogger("").setLevel(Level.SEVERE)
    val sessio = Configuration().configure().buildSessionFactory().openSession()
    val t = sessio.beginTransaction()
    val com = sessio.get("classes.Comarca", "Camp de Morvedre") as Comarca
    com.provincia = "Castelló"

    sessio.merge(com)

    t.rollback()

    sessio.close()
}

En realitat tant el mètode persist() com el mètode merge() serveixen tant per a actualitzar un objecte ja existent (que ja era persistent) com per a crear-ne un nou si no existia.