ვაგრძელებთ ისევ Hibernate-ს ანოტაციების განხილვას და ამ პოსტში განვიხილოთ @OneToMany ანოტაცია. Hibernate-
ში @OneToMany
ანოტაცია განსაზღვრავს
ერთი ბევრთან კავშირს. მაგალითად ერთ პიროვნებას აქვს ბევრი ტელეფონის ნომერი. თუმცა
ამ ანოტაციასთან ერთად გამოიყენება @JoinColumn
ანოტაცია, რომელიც განსაზღვრავს იმას, რომ ეს კონკრეტული entity (რომელშიც ეს ანოტაცია წერია) არის
კავშირის მფლობელი (owner). ხოლო
ატრიბუტი, mappedBy მიუთითებს
იმაზე, რომ entity ამ
მხარეში არის კავშირის უკუგება, ანუ სხვა სიტყვებით რომ ვთქვათ, ეს entity არ არის კავშირის
„მფლობელი“ (owner). ამ
კავშირის დროს გვაქვს კიდევ ერთი fetch ატრიბუტი, რომელიც განსაზღვრავს კავშირის დამყარებას როგორ ჩაიტვირთოს
დაკავშირებული ობიექტი. მაგალითად, თუ Person
კლასს აქვს PhoneNumber-ების
სია თავის ველად, და fetch არის default, ანუ
Lazy, მაშინ Person-ების
გამოტანისას არ წამოყვება ტელეფონის ნომრები და ეს წამოღება მხოლოდ მაშინ მოხდება,
როცა უკვე მივმართავთ ტელეფონის ნომრებს. ვნახოთ რა ხდება ამ დროს SQL-ში.
Main-ში უბრალოდ ვეძებთ პიროვნებას, რომლის ID არის 1 და ვბეჭდავთ მის ტელეფონის ნომრებს (ამ შემთხვევაში მთავარი ისაა, რომ ამ ველს მივმართავთ)
ახლა ვნახოთ რა Query გაეშვა მონაცემთა ბაზაზე
როგორც ხედავთ გაეშვა ორი Query: ერთ პიროვნების წამოღება და მეორე პიროვნების მიხედვით ტელეფონის ნომრების წამოღება. ახლა ვნახოთ რა მოხდება თუ fetch-ს გავხდით EAGER-ს.
როგორც სურათიდან ჩანს, ორი Query-ის მაგივრად გაეშვა ერთი და ტელეფონების ნომრები წამოიღო პიროვნების წამოღებასთან ერთად. ანუ ეს Query შეიცავს დაკავშირების ბრძანებასაც LEFT OUTER JOIN
No comments:
Post a Comment