SlideShare a Scribd company logo
mustafa daşgınmdasgin.blogspot.commustafa.dasgin@prime.com.trJPA
Kalıcı olarak barındırılan veriİlişkisel veri tabanı, dosya, vb.Veri bütünlüğü, güvenlik, eş zamanlı erişim vb. kriterlerin sağlanmasıPersistence Nedir?
Birbirleriyle ilişkili nesnelerin kaydedilip daha sonra tekrar aynı şekilde oluşturulmasıJava’da nesneler – VT’de tablolarGranülarite UyumsuzluğuSubtype UyumsuzluğuIdentity Uyumsuzluğuİlişkisel UyumsuzluklarVeriye Erişim UyumsuzluklarıJava Nesnelerinde Kalıcılık
Granülarite Uyumsuzluğupublic class User {private String username;private String name;private Adressaddress;private Set billingDetails;// getter/setter...}public class BillingDetails {private String accountNumber;private String accountName;private User user;// getter/setter...}public class Adress {private String street;private String city;}
Granülarite Uyumsuzluğu (Devam)create table USERS (USERNAME varchar(15) not null primary key,NAME varchar(50) not null,ADDRESS_STREET varchar(50),ADDRESS_CITY varchar(15),)create table BILLING_DETAILS (ACCOUNT_NUMBER varchar(10) not null primary key,ACCOUNT_NAME varchar(50) not null,USERNAME varchar(15) foreign key references user)
Inheritance ve Polymorphism gerçekleştirimiHepsi tek tablodaHer biri ayrı tablodaOrtak değişkenler tek tabloda vb.Subtype Uyumsuzluğu
Java’da iki nesne eşitliği:a ==b a.equals(b) VT’de eşitlikPrimary KeyÖnerilen her nesnenin primary key için “id” değişkeni olmalıIdentity Uyumsuzluğu
Nesne ilişkileri yönlüdür (iki yönlü olabilir) :Many-to-many ilişkiler olabilirVT’de ilişki foreign key ile sağlanırTablolar arası ilişki her zaman one-to-one  ya da one-to-manyMany-to-many ilişkilerde üçüncü bir tablo gerekliİlişkisel Uyumsuzluklarpublic class User {private Set billingDetails;...}public class BillingDetails {private User user;	// private Set user;}
Nesne veri erişimiVT’de erişimVeriye Erişim UyumsuzluklarıaUser.getBillingDetails().getAccountNumber()select *from USERS uleft outer join BILLING_DETAILS bd on bd.USER_ID = u.USER_IDwhere u.USER_ID = 123
Kalıcı veri üzerinde değişiklik yapabilmek içinselect (tablo ve kolon isimleri)insert (tablo ve kolon isimleri)update (tablo ve kolon isimleri)	komutları Java kodları içerisinde yazılmalı. (Her bir nesne için)Diğer Bir Problem - JDBC
Object/Relational MappingNesneler ve VT arasında eşleşmenin, tanımlanan metadata bilgileri ile otomatik gerçekleştirilmesiBir gösterimden diğerine dönüşüm işlemi (Nesne <-> VT)ORM Nedir?
Temel CRUD işlemini gerçekleştirebilmek için APISınıf ve nitelikleri tasvir eden SQL benzeri sorgu diliEşleme için metadata tanımlama yöntemiTransaction, Concurrency, Caching, Lazy-loading, vb. özellikler ORM Çöz. Sunması Gerekenler
EJB 3.0 ile tanımlanan Persistence API belirtimiHibernate geliştiricileri JPA belirtiminin oluşturulmasında katkı sağladı.Hibernate ModülleriHibernate Core (Varolan Hibernate yetenekleri)Hibernate AnnotationHibernate EntityManager (JPA belirtimi için Hibernate yeteneklerinin bir kısmının sarmalanmış hali)JPA Nedir? Hibernate Nedir?
Temel Annotation Mapping@Entity@Table(name=“User”)public class User {@Id@GeneratedValue(strategy = GenerationType.AUTO)	@Column(name=“user_id”)private Long id;	@Column(name=“user_name”, nullable = false)private String name;	@Column(name=“user_surname”, nullable = false)private String surname;...
@Embeddable / @Embedded@Embeddablepublic class Address {@Column(name = "ADDRESS_STREET", nullable = false)private String street;@Column(name = "ADDRESS_ZIPCODE", nullable = false)private String zipcode;@Column(name = "ADDRESS_CITY", nullable = false)private String city;...}@Entity@Table(name = "USERS")public class User {...@Embeddedprivate Address homeAddress;...}
@Embedded @AttributeOverrides@Entity@Table(name = "USERS")public class User {...@Embedded@AttributeOverrides( {@AttributeOverride(name = "street",column = @Column(name="HOME_STREET") ),@AttributeOverride(name = "zipcode",column = @Column(name="HOME_ZIPCODE") ),@AttributeOverride(name = "city",column = @Column(name="HOME_CITY") )})private Address homeAddress;...}
@MappedSuperClass (Kalıtım)@MappedSuperclasspublic abstract class BillingDetails {@Column(name = "OWNER", nullable = false)private String owner;...}
@MappedSuperClass (Devam)@Entity@AttributeOverride(name = "owner", column =@Column(name = "CC_OWNER", nullable = false))public class CreditCard extends BillingDetails {@Id @GeneratedValue@Column(name = "CREDIT_CARD_ID")private Long id = null;@Column(name = "NUMBER", nullable = false)private String number;...}
@Inheritance@Entity@Inheritance(strategy = InheritanceType.JOINED)public abstract class BillingDetails {@Id @GeneratedValue@Column(name = "BILLING_DETAILS_ID")private Long id = null;...}@Entity@PrimaryKeyJoinColumn(name = "CREDIT_CARD_ID")public class CreditCard {...}
@ManyToOne / @OneToManypublic class Phone{...@ManyToOne@JoinColumn(name = “USER_ID", nullable = false)private Useruser;...}public class User{...@OneToMany(mappedBy = “user")private Set<Phone> phones= new HashSet<Phone>();...}
@OneToOnepublic class User {...@OneToOne@JoinColumn(name="SHIPPING_ADDRESS_ID")private Address shippingAddress;...}public class Address {...@OneToOne(mappedBy = "shippingAddress")private User user;...}
@ManyToMany@ManyToMany@JoinTable(name = "CATEGORY_ITEM",joinColumns= {@JoinColumn(name = "CATEGORY_ID")},inverseJoinColumns= {@JoinColumn(name = "ITEM_ID")})private Set<Item> items = new HashSet<Item>();@ManyToMany(mappedBy = "items")private Set<Category> categories = new HashSet<Category>();
Java Persistence with Hibernate (Manning)Kaynak

More Related Content

PPTX
Jsf
PPTX
Spring
PPTX
Spring Web Service
PDF
PDF
Sell First, Build Later with the Lean Startup: Fundamentals, Tools, Methods a...
PDF
Git and Git Workflow Models as Catalysts of Software Development
ODP
Hibernate ve jpa
PPT
Hibernate ve jpa
Jsf
Spring
Spring Web Service
Sell First, Build Later with the Lean Startup: Fundamentals, Tools, Methods a...
Git and Git Workflow Models as Catalysts of Software Development
Hibernate ve jpa
Hibernate ve jpa

Similar to Jpa (14)

PPTX
AnkaraJUG Nisan 2013 - Java Persistance API
PDF
Bilginç IT Academy - JPA (Java Persistence API)
PPTX
Azerbaycan Qafqaz Üniversitesi - (Java Persistence API) JPA ve Hibernate ile ORM
PDF
20160414 voxxed days_ist_dynamic_proxy_based_view_model_tr
ODP
Ozgur web-gunleri-sunum
PDF
Java ve axis2 framework ile web service yayınlamak
PPTX
Nosql wars &amp; machine learning
PPT
NoSQL Sunumu
PPTX
PDF
İlişkisel Veritabanları, ORM ve Doctrine
PPT
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
PDF
Nosql veritabanlari
PDF
Spring application framework
AnkaraJUG Nisan 2013 - Java Persistance API
Bilginç IT Academy - JPA (Java Persistence API)
Azerbaycan Qafqaz Üniversitesi - (Java Persistence API) JPA ve Hibernate ile ORM
20160414 voxxed days_ist_dynamic_proxy_based_view_model_tr
Ozgur web-gunleri-sunum
Java ve axis2 framework ile web service yayınlamak
Nosql wars &amp; machine learning
NoSQL Sunumu
İlişkisel Veritabanları, ORM ve Doctrine
Kurumsal Yazılım Geliştirme ve Visual Studio 2008
Nosql veritabanlari
Spring application framework
Ad

Jpa

  • 2. Kalıcı olarak barındırılan veriİlişkisel veri tabanı, dosya, vb.Veri bütünlüğü, güvenlik, eş zamanlı erişim vb. kriterlerin sağlanmasıPersistence Nedir?
  • 3. Birbirleriyle ilişkili nesnelerin kaydedilip daha sonra tekrar aynı şekilde oluşturulmasıJava’da nesneler – VT’de tablolarGranülarite UyumsuzluğuSubtype UyumsuzluğuIdentity Uyumsuzluğuİlişkisel UyumsuzluklarVeriye Erişim UyumsuzluklarıJava Nesnelerinde Kalıcılık
  • 4. Granülarite Uyumsuzluğupublic class User {private String username;private String name;private Adressaddress;private Set billingDetails;// getter/setter...}public class BillingDetails {private String accountNumber;private String accountName;private User user;// getter/setter...}public class Adress {private String street;private String city;}
  • 5. Granülarite Uyumsuzluğu (Devam)create table USERS (USERNAME varchar(15) not null primary key,NAME varchar(50) not null,ADDRESS_STREET varchar(50),ADDRESS_CITY varchar(15),)create table BILLING_DETAILS (ACCOUNT_NUMBER varchar(10) not null primary key,ACCOUNT_NAME varchar(50) not null,USERNAME varchar(15) foreign key references user)
  • 6. Inheritance ve Polymorphism gerçekleştirimiHepsi tek tablodaHer biri ayrı tablodaOrtak değişkenler tek tabloda vb.Subtype Uyumsuzluğu
  • 7. Java’da iki nesne eşitliği:a ==b a.equals(b) VT’de eşitlikPrimary KeyÖnerilen her nesnenin primary key için “id” değişkeni olmalıIdentity Uyumsuzluğu
  • 8. Nesne ilişkileri yönlüdür (iki yönlü olabilir) :Many-to-many ilişkiler olabilirVT’de ilişki foreign key ile sağlanırTablolar arası ilişki her zaman one-to-one ya da one-to-manyMany-to-many ilişkilerde üçüncü bir tablo gerekliİlişkisel Uyumsuzluklarpublic class User {private Set billingDetails;...}public class BillingDetails {private User user; // private Set user;}
  • 9. Nesne veri erişimiVT’de erişimVeriye Erişim UyumsuzluklarıaUser.getBillingDetails().getAccountNumber()select *from USERS uleft outer join BILLING_DETAILS bd on bd.USER_ID = u.USER_IDwhere u.USER_ID = 123
  • 10. Kalıcı veri üzerinde değişiklik yapabilmek içinselect (tablo ve kolon isimleri)insert (tablo ve kolon isimleri)update (tablo ve kolon isimleri) komutları Java kodları içerisinde yazılmalı. (Her bir nesne için)Diğer Bir Problem - JDBC
  • 11. Object/Relational MappingNesneler ve VT arasında eşleşmenin, tanımlanan metadata bilgileri ile otomatik gerçekleştirilmesiBir gösterimden diğerine dönüşüm işlemi (Nesne <-> VT)ORM Nedir?
  • 12. Temel CRUD işlemini gerçekleştirebilmek için APISınıf ve nitelikleri tasvir eden SQL benzeri sorgu diliEşleme için metadata tanımlama yöntemiTransaction, Concurrency, Caching, Lazy-loading, vb. özellikler ORM Çöz. Sunması Gerekenler
  • 13. EJB 3.0 ile tanımlanan Persistence API belirtimiHibernate geliştiricileri JPA belirtiminin oluşturulmasında katkı sağladı.Hibernate ModülleriHibernate Core (Varolan Hibernate yetenekleri)Hibernate AnnotationHibernate EntityManager (JPA belirtimi için Hibernate yeteneklerinin bir kısmının sarmalanmış hali)JPA Nedir? Hibernate Nedir?
  • 14. Temel Annotation Mapping@Entity@Table(name=“User”)public class User {@Id@GeneratedValue(strategy = GenerationType.AUTO) @Column(name=“user_id”)private Long id; @Column(name=“user_name”, nullable = false)private String name; @Column(name=“user_surname”, nullable = false)private String surname;...
  • 15. @Embeddable / @Embedded@Embeddablepublic class Address {@Column(name = "ADDRESS_STREET", nullable = false)private String street;@Column(name = "ADDRESS_ZIPCODE", nullable = false)private String zipcode;@Column(name = "ADDRESS_CITY", nullable = false)private String city;...}@Entity@Table(name = "USERS")public class User {...@Embeddedprivate Address homeAddress;...}
  • 16. @Embedded @AttributeOverrides@Entity@Table(name = "USERS")public class User {...@Embedded@AttributeOverrides( {@AttributeOverride(name = "street",column = @Column(name="HOME_STREET") ),@AttributeOverride(name = "zipcode",column = @Column(name="HOME_ZIPCODE") ),@AttributeOverride(name = "city",column = @Column(name="HOME_CITY") )})private Address homeAddress;...}
  • 17. @MappedSuperClass (Kalıtım)@MappedSuperclasspublic abstract class BillingDetails {@Column(name = "OWNER", nullable = false)private String owner;...}
  • 18. @MappedSuperClass (Devam)@Entity@AttributeOverride(name = "owner", column =@Column(name = "CC_OWNER", nullable = false))public class CreditCard extends BillingDetails {@Id @GeneratedValue@Column(name = "CREDIT_CARD_ID")private Long id = null;@Column(name = "NUMBER", nullable = false)private String number;...}
  • 19. @Inheritance@Entity@Inheritance(strategy = InheritanceType.JOINED)public abstract class BillingDetails {@Id @GeneratedValue@Column(name = "BILLING_DETAILS_ID")private Long id = null;...}@Entity@PrimaryKeyJoinColumn(name = "CREDIT_CARD_ID")public class CreditCard {...}
  • 20. @ManyToOne / @OneToManypublic class Phone{...@ManyToOne@JoinColumn(name = “USER_ID", nullable = false)private Useruser;...}public class User{...@OneToMany(mappedBy = “user")private Set<Phone> phones= new HashSet<Phone>();...}
  • 21. @OneToOnepublic class User {...@OneToOne@JoinColumn(name="SHIPPING_ADDRESS_ID")private Address shippingAddress;...}public class Address {...@OneToOne(mappedBy = "shippingAddress")private User user;...}
  • 22. @ManyToMany@ManyToMany@JoinTable(name = "CATEGORY_ITEM",joinColumns= {@JoinColumn(name = "CATEGORY_ID")},inverseJoinColumns= {@JoinColumn(name = "ITEM_ID")})private Set<Item> items = new HashSet<Item>();@ManyToMany(mappedBy = "items")private Set<Category> categories = new HashSet<Category>();
  • 23. Java Persistence with Hibernate (Manning)Kaynak