Pilihan status obyek sing bisa

Kaya sing sampeyan ngerteni, nalika obyek digandhengake karo Hibernate, negara kasebut diarani Persistent utawa Managed . Carane bener? Terus utawa Ngatur?

Iku bisa lan supaya, lan supaya. Miturut spesifikasi JPA, obyek nduweni status Persist, lan miturut spesifikasi Hibernate, negara kasebut diarani Managed.

Ing Hibernate, nggarap database ditindakake liwat obyek saka jinis org.hibernate.Session . Miturut JPA, kelas kasebut kudu diarani javax.persistence.EntityManager. Iki dudu masalah gedhe, amarga loro jinis kasebut minangka antarmuka.

Antarmuka org.hibernate.Session diumumake kaya iki:

interface Session extends java.lang.AutoCloseable, javax.persistence.EntityManager, HibernateEntityManager,    QueryProducer, java.io.Serializable, SharedSessionContract {

}

Mulane, antarmuka Sesi duwe kabeh cara sing ana ing antarmuka EntityManager . Nanging uga duwe dhewe, sing diwarisake saka versi Hibernate sadurunge, nalika durung ana spesifikasi JPA.

Kabeh kahanan iki diterangake kaya ing ngisor iki:

Ayo goleki kabeh cara sing ana ing antarmuka sesi, uga nuansa karyane.

Nuansa metode persist().

Nalika nyimpen obyek menyang database, sampeyan kudu ngelingi rong perkara.

Kaping pisanan, nyimpen obyek kasebut bakal nyebabake eksekusi salah sawijining perintah SQL: INSERT utawa UPDATE. Kapindho, tumindak kasebut ora bakal kedadeyan langsung sawise nelpon metode obyek kasebutsesi, nanging mung sawise nutup transaksi.

Ayo dipikirake sawetara kahanan sing gampang, umpamane, sampeyan duwe kelas Panganggo :

@Entity
public class User {
	@Id
	@GeneratedValue
    public Integer id;

	@Columnt(name=”user_name”)
    public String name;
}

Ayo nyimpen obyek kasebut menyang database nggunakake metode persist() .

User user = new User();
user.setName("Kolyan");
session.persist(user);

Tujuan metode iki yaiku kanggo nyimpen obyek anyar menyang database. Yen durung ana obyek kasebut, banjur bakal ditambahake menyang database kanthi nelpon metode INSERT SQL .

Yen obyek kasebut wis ana ing basis data, mula ora ana sing kedadeyan. Nanging, kasus katelu uga bisa - upaya kanggo nyimpen obyek kanthi status Detached menyang database. Ing kasus iki, pangecualian bakal dibuwang. Tuladha:

User user = new User();
user.setName("Kolyan");
session.persist(user);

session.evict(user);     // detach the object from the session
session.persist(user); // a PersistenceException will be thrown here!

Nuansa metode save().

Cara nyimpen () diwarisake dening Hibernate saiki saka versi sadurunge. Ing inti, iku banget padha karo persist () cara , uga nambah rekaman anyar ing meja nggunakake cara INSERT. Nanging, ana sawetara nuansa menarik.

Pisanan, cara iki ngasilake nilai - ID anyar saka obyek . Kaya sing wis dingerteni, obyek biasane ora duwe ID sadurunge ditambahake menyang database lan wis ditugasake dening database. Dadi, metode simpen () saka obyek sesi ngasilake ID sing ditugasake menyang obyek sing disimpen.

Penting! Miturut spesifikasi ID Hibernate, bisa dadi obyek serialisasi, ora mung nomer. Bisa dadi senar, nomer, enum, apa wae sing umum bisa dilebokake ing siji kolom tabel ing database.

Cara nyimpen () nduweni jinis asil Serialized, supaya asil kudu dibuwang menyang jinis sing bener:

User user = new User();
user.setName("Kolyan");
Integer id = (Integer) session.save(user);

Uga, ing nyimpen () cara wis prilaku beda ing cilik saka negara Detached obyek. Iku nganggep obyek kasebut minangka anyar lan mung nambah entri liyane:

User user = new User();
user.setName("Kolyan");
Integer id = (Integer) session.save(user);

session.evict(user); 	// detach the object from the session
Integer id2 = (Integer) session.save(user);

Variabel id lan id2 bakal beda. Loro cathetan bakal ditambahake ing meja ing database, siji kanggo saben nyimpen () operasi .