4.1 Transaksi lan integritas database

Mode operasi normal database yaiku nalika nampa ewu panjalukan saben menit saka atusan klien sing beda-beda. Ing kasus iki, kahanan asring muncul nalika data sing padha diakses saka pitakon sing beda.

Kurang asring, nanging, maneh, saka wektu kanggo wektu ana kahanan nalika siji request maca baris tartamtu, lan request liyane ngganti ing wektu sing padha. Mbayangno apa sing kedadeyan yen ana sing maca baris sing mung diganti setengah? Ora ana sing apik.

Masalah iki ditanggulangi kanthi sawetara cara. Pisanan, sampeyan mung bisa ngunci baris sing diganti. Loro kanggo maca lan nulis. Cara iki bisa digunakake, nanging kacepetan basa nandhang sangsara banget.

Cara kapindho yaiku ngunci senar mung kanggo nulis. Nanging, isih bakal ana masalah nalika ana sing nyoba maca baris sing diowahi sebagian. Kesimpulan - ora kudu ana kahanan nalika baris diganti sebagian.

Mulane, padha teka karo cara katelu - transaksi. Transaksi minangka klompok tumindak sing ditindakake bebarengan, utawa ora ana. Ora ana kahanan ing ngendi bagean saka tumindak ditindakake, lan bagean kapindho ora ditindakake. Yen ora bisa nindakake kabeh owah-owahan, banjur kabeh owah-owahan sing wis digawe bakal mbalek maneh.

Sembarang server SQL modern ngidini sampeyan ngganti data mung ing transaksi. Sampeyan mbukak transaksi, nggawe owah-owahan ing sawetara tabel, lan nindakake transaksi kasebut. SQL Server banjur nyoba kanggo nggawe owahan. Yen kabeh apik, banjur bakal ditambahake menyang database umum. Yen ana masalah, kabeh owah-owahan bakal dibatalake.

Hibernate uga nggunakake paradigma iki. Mulane ing kuliah sadurunge kita weruh yen nalika nyoba nyimpen obyek Karyawan menyang database, transaksi pisanan dibukak, lan sawise nyimpen, wis setya.

Kita bakal luwih rinci babagan topik iki, nanging saiki, ngerti sebabe transaksi dibutuhake lan ing ngendi biasane digunakake.

4.2 Njupuk obyek

Yen Hibernate nglakokake panjalukan kanggo entuk data, mula ora perlu mbukak transaksi kanthi jelas. Hibernate dhewe bakal nindakake iki yen katon pas: duwe setelan, uga setelan server SQL.

Kita bakal nganalisa cara nggarap database. Lan sing paling gampang yaiku njupuk obyek kanthi ID . Kanggo nindakake iki, gunakake metode get()ing obyek sesi . Bentuk umum panyuwunan kasebut:

Class Name = session.get(Class.class, ID);

Tuladha:

public User getUserById(Integer id) {
    try (Session session = sessionFactory.openSession()) {
        User user = session.get(User.class, id);
        return user;
    }
}

4.3 Nyimpen (nambah) obyek

Yen sampeyan pengin nyimpen obyek menyang database, banjur query bakal dieksekusi ing tingkat SQLINSERT. Mula, tumindak sampeyan kudu ditindakake minangka transaksi sing kapisah. Uga, luwih becik nggunakake metode persist()obyek sesi kanggo kegigihan .

Bentuk umum panyuwunan kasebut:

session.persist(An object);

Cara kasebut persist()ora mung ngganti basis, nanging uga obyek kasebut. Masalahe yaiku nalika kita nambahake obyek menyang database, obyek iki durung duwe ID dhewe sadurunge nambahake . Inggih, biasane, sanajan ana nuansa. Lan sawise nambah obyek wis duwe ID .

public boolean saveUser(User user) {
    try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
            session.persist(user);
            transaction.commit();
            return true;
    }
    catch() {
    return false;
   	}
}

Obyek Sesi uga nduweni cara save()sing nindakake fungsi sing padha. Mung cara kasebut save()minangka standar Hibernate lawas lan metode kasebut persist()minangka standar JPA.

4.4 Mbusak obyek

Yen sampeyan pengin mbusak obyek sing wis ana, mula gampang banget. Kanggo nindakake iki, obyek sesi duwe cara khusus - remove().

Bentuk umum panyuwunan kasebut:

session.remove(An object);

Lan, mesthi, ayo nulis kode kanthi conto:

public boolean removeUser(User user) {
    try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
            session.remove(user);
            transaction.commit();
            return true;
    }
    catch() {
    return false;
   	}
}

Kenapa angel banget, sampeyan takon?

Inggih, sepisanan, owah-owahan ing basis data mesthi duwe akibat sing beda lan ora mesthi jelas. Lan kapindho, obyek iki bisa duwe obyek anak sing digandhengake karo, etc. Dadi skenario pambusakan asring non-trivial.