CodeGym /Kursus /SQL & Hibernate /Lazy Loading nalika pemetaan koleksi

Lazy Loading nalika pemetaan koleksi

SQL & Hibernate
tingkat , wulangan
kasedhiya

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 @OneToOnelan @ManyToOneEAGER, kanggo anotasi @OneToManylan @ManyToManyLAZY. 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.

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION