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

Bu blogdaki popüler yayınlar

İNGİLİS DİLİNDƏ ƏN ÇOX İSTİFADƏ OLUNAN 2600 CÜMLƏ QƏLİBLƏRİ VƏ 6000 SÖZ

INGILIS DILI BUTUN ZAMANLAR