HİBERNATE QISA QEYDLƏR
ORM nedir ? - Obejct Relational Mapping adi ustunde yeni)) Obyektlerin relational database ile elaqelendirilib mapping edilmesi .Sizin Entity classlarinizi bazadaki uygun table ile elqelendirlmesi rolunu oynayir
Hibernate - EclipseLink , iBatis ve.s kim bir ORM vasitesidir ancaq en populari ele Hibernatedir. Jboss firmasinin pulsuz, open source bir framework-dur .
http://www.hibernate.org/downloads. adresinden en son versiyasini yukleyin
Librarynizi yaradib jar fayllarini add etdikden sonra Hibernate.cfg config faylini add edib uygun duzelisleri edin
Bu config faylinda :
- baza elalqe parametrleri (url , username , password , dialect deyeri),
- show-sql (consolda calisan zaman arxada olan sqlleri izlemek istyrsinizse true olur)
- hbm2ddl ( burada program her defe isleyende var olan bazani silib tezden yaradacagi yoxsa var olan uzerinde dyisiklikleri edeceyi gosterilir)
@Entity - pojolarinizin bazaya nappingi ucun bu annotasya istfde edilir
* @Entity(name="Bazaya ferqli adda maping etmek istyirsinizse sinifinizi hemin adi " )
@ID- unique id columumuzun uzerine bu anotasya qoyularaq onun id olacaagi gosterilir
@GeneratedValue(strategy=GenerationType.AUTO) - @ID columunun avtomatik deyer verilmesi ucun istfde edilir
@Column(name="ferqli adda bazaya mapping olmasi ucun column adinin hemin ad")
@Transient - Mapping olmasini istemediyimiz column uzerine yazilir
@Basic - Bazaya yazilmasi vacib null icazesi olmayan column uzerine
@Lob - Boyuk hecimli deyerleri tutan tiplerde olan column uzerine
@Temporal(Temporal.DATE) - zaman tipli columlar uzerine
@SecondaryTable(name="ikinci table") - bir entity iki ayri table yazilirsa bir yerde secondarytable istfde ederek bunu etmek olar
*** ancaq bu zaman @Column(name="___" , table="hansi table yazilacagi") gosterlmelidi
@Embedable - bir basqa sinifi icerisine embed edilcek entity uzerine yazilaraq embedable olma imkani verilir
@Embedded- ile ise hemin @embedable olan class embed edilir entity-mize
**@AttributeOverride - ile tutaqki Embed etdiyiniz Adress class -i tipde eyni columlu bele deyim dee bir clasin bir entityde home ve office adresleri ucun iki referansini tutacaqsinizsa olarin digerinin colum namelerini override edib deyisdire bilerisiz
@ElementCollection - collectionlarin mapingi ucundur
*** @ElementCollection(fetch= " iki variant var LAZY ve ya EAGER , default olaraq eagerdir bu zaman butun elaqeli baza melumatlari getirilir .Boyuk hecimli bazalarda bu performans baximindan duzgun olmazdi )
@NamedQuery(name="queryadi" , query="sorgumuz") - ile oz sorgularimizi hazirlayib adlandirib sonra istfde etmek ucundur
*** query-de parametr istfde etmek ucun :paramsutunadimiz formasinda queryde yazib , istfde ederken ise .setParammeter("paramsutunadimiz","Resul"); bu formada istfde ede bilerik
Indi ise Bir biri ile elaqeli cedvellerin entity terefinde nece elqelendirldiyine baxaq ;)
1-1 yeni @OneToOne- birin bire elqesinde bu anotasyadan isfde edirik .
**@JoinColumn(name="col_name meselem ID columuzu tutaqki yazaraq id-ni de tuta bilerik)
1-M yeni @OneToMany - birin coxa elaqesinde many terefimizi one terefimizde collection tipinde tutub uzerine anotasyamaizi yaziriq , one terefimizi ise many terefinde popertysini yaradib @ManyToOne uzerine yaziriq
** aradaki elqeli melumatlar bir tutaqki cedvel1_cedvel2 adli bir cedvel yaradilib tutulacaqsa
@JoinTable
(
name="cedvel1_cedvel2 ,
joinColumns=@JoinColumn(name="ID_ONEterefcolumn"),
inversejoincolumn=@JoinColumn(name="ManyterefColumn")
)
seklinde yaza bilersiz
***Cascade istfdesi ucun ise @OneToMany(cascade="CascadeType. PERSIST ,REMOVE,MERGE,DETACH,REFRESH ve ALL -dan birini secirsiz)
M-M @ManyToMany - ile ise coxun coxa elaqelerde istfde edilir.Her iki terefde collection tipinde tutulub uzerien anotasyamiz yazilir /
***Cascade istfdesi ucun ise @OneToMany(cascade="CascadeType. PERSIST ,REMOVE,MERGE,DETACH,REFRESH ve ALL -dan birini secirsiz)
M-M @ManyToMany - ile ise coxun coxa elaqelerde istfde edilir.Her iki terefde collection tipinde tutulub uzerien anotasyamiz yazilir /
*** Esas teref olmayan cedveli gostermek ucun ise @ManyToMany( mappedBy="cedvel2list)
Bu elqede bildiyimiz kimi 3-cu cedvel olur ara cedvel .Burada yaranan cedvelin adini @JoinTable ile deyise bilersiniz yene de
*mappedby nedir ? dusunursuzse qisaca izah edim
mappedby anlayisi ancaq bidirectional elaqelerde ola biler.Ve esas terefi gosterir
Meselem OneToMany/ManyToOne elaqesinde mappedby oneToMany terefde yeni inverse side-da qeyd edilir.Yeni mappedBy qeyd olunmayan teref ise esas sahib terefdi ,owning sidedir bu elaqede.Yeni foreign keyimiz owning terefde olur.
*mappedby nedir ? dusunursuzse qisaca izah edim
mappedby anlayisi ancaq bidirectional elaqelerde ola biler.Ve esas terefi gosterir
Meselem OneToMany/ManyToOne elaqesinde mappedby oneToMany terefde yeni inverse side-da qeyd edilir.Yeni mappedBy qeyd olunmayan teref ise esas sahib terefdi ,owning sidedir bu elaqede.Yeni foreign keyimiz owning terefde olur.
Indi ise biraz Tranzaksiyalar movzusuna baxaq ;)
burada begin ve commit arasina yaziriq emealyat kodlarimizi
istesek her hansi sertde .rollback() ile propsesi geri qaytara bielrik
CRUD emeliyatlarini nece yerine yetireceyinize dair bir iki exampelere baxaq ;)
qisaca chaching haqqinda da yazim ;)
bildiyiniz kimi chaching performans artimi ucun nezerde tutulub yeni her defe sorgu etmek evezine sorgunu yadda saxlayib tekrar muracietde yeniden bazaya muraciet etmez ve performans elde etmis olariq /
CRUD emeliyatlarini nece yerine yetireceyinize dair bir iki exampelere baxaq ;)
50000-den cox datanin yazilmasi zamani out of memory exception-una qarsi flush ve clear istfdesi
qisaca chaching haqqinda da yazim ;)
bildiyiniz kimi chaching performans artimi ucun nezerde tutulub yeni her defe sorgu etmek evezine sorgunu yadda saxlayib tekrar muracietde yeniden bazaya muraciet etmez ve performans elde etmis olariq /
default olaraq first-level chach istfde edilir ancaq second level chache de var/
first levelde Persistance context dediyimiz sessiona aid life cycle ondan asili olan bir seydir.
(Adeten sessionlari biz EJB , Spring ile idare edirik)
@Cachable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY,READ_WRITE,TRANSACTIONAL,NOSTRICT_READ -den birini yaziriq)
adeten hibernate ile JBoss Tree Cache, SwarmCache, Oscache,Ehcache istfde edilir.
Yorumlar
Yorum Gönder