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 /   

***  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.



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 ;)







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