2.1 pilihan njupuk
Pangembang Hibernate wis suwe ngerti babagan masalah ngemot entitas anak. Dadi, sing pisanan ditindakake yaiku nambah parameter njupuk khusus menyang anotasi @OneToMany
, @ManyToMany
.
Parameter iki bisa njupuk rong nilai:
- EAGER
- KELAS
Tuladha:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
Yen parameter fetch padha karo EAGER , banjur nalika entitas induk dimuat, kabeh entitas anak uga bakal dimuat. Uga, Hibernate bakal nyoba nindakake ing siji query SQL, ngasilake query gedhe lan njupuk kabeh data bebarengan.
Yen parameter fetch njupuk nilai LAZY , banjur nalika entitas induk dimuat, entitas anak ora bakal dimuat. Nanging, obyek proxy bakal digawe.
Kanthi bantuan obyek proxy iki, Hibernate bakal nglacak akses menyang entitas anak iki lan mbukak menyang memori nalika pisanan diakses.
Yen kita ngelingi kahanan kita kanthi komentar:
@Entity
@Table(name="user")
class User {
@Column(name="id")
public Integer id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
public List<Comment> comments;
}
Banjur sampeyan duwe "pilihan apik":
Yen fetch = FetchType.EAGER
, banjur Hibernate bakal mbukak kabeh komentar ing baris pertama kode:
User user = session.get(User.class, 1); //load all comments here
List<Comment> comments = user.getComments();
Yen fetch = FetchType.LAZY
, banjur Hibernate bakal mbukak kabeh komentar ing baris 2 kode:
User user = session.get(User.class, 1);
List<Comment> comments = user.getComments(); //load all comments here
Kaya sing wis bisa ditebak, sampeyan ora duwe pilihan nalika ora mbukak kabeh komentar :)
2.2 Nilai standar
Yen sampeyan ora nemtokake opsi njupuk kanggo @ManyTo
... anotasi, banjur Hibernate bakal nggunakake nilai standar.
Padha rada beda kanggo macem-macem jinis anotasi. Kanggo anotasi @OneToOne
lan @ManyToOne
EAGER, kanggo anotasi @OneToMany
lan @ManyToMany
LAZY. Iku gampang kanggo elinga - yen kita deleng siji obyek, banjur bakal dimuat rampung. Yen kita ngrujuk menyang koleksi, banjur bakal dimuat nalika pisanan diakses.
2.3 @LazyCollection anotasi
Kaya sing wis sampeyan deleng, parameter njupuk ora mbantu akeh nalika nggarap koleksi. Pencipta Hibernate nyoba ndandani iki kanthi nambahake anotasi khusus @LazyCollection
. Biasane ditulis kaya mangkene:
@LazyCollection(LazyCollectionOption.TRUE)
Sampeyan kudu nemtokake nalika pemetaan kolom koleksi:
@Entity
@Table(name="user")
class User {
@Column(name="id")
public Integer id;
@OneToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.TRUE)
public List<Comment> comments;
}
Anotasi iki nduweni parameter nilai sing bisa njupuk salah siji saka telung nilai:
- LazyCollectionOption. BENER
- LazyCollectionOption. PALSU
- LazyCollectionOption. TAMBAHAN
Rong pilihan pisanan meh padha karo pilihan njupuk.
Yen parameter disetel menyang LazyCollectionOption.TRUE
, tegese nilai kolom komentar ora bakal dimuat saka database nalika obyek pangguna induk dimuat. Obyek saka jinis Komentar bakal dimuat nalika pisanan kolom komentar diakses. Ing kasunyatan, iki padha karo parameterFetchType.LAZY
Yen parameter disetel menyang LazyCollectionOption.FALSE
, tegese nilai kolom komentar bakal dimuat saka database nalika ngemot obyek pangguna induk. Obyek saka jinis Komentar bakal dimuat nalika pisanan kolom komentar diakses. Nyatane, iki padha karo FetchType.EAGER
.
GO TO FULL VERSION