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