Jpa
Upcoming SlideShare
Loading in...5
×
 

Jpa

on

  • 1,993 views

 

Statistics

Views

Total Views
1,993
Views on SlideShare
1,978
Embed Views
15

Actions

Likes
0
Downloads
22
Comments
0

3 Embeds 15

http://www.techgig.com 7
http://www.linkedin.com 6
https://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Jpa Jpa Presentation Transcript

  • mustafa daşgın
    mdasgin.blogspot.com
    mustafa.dasgin@prime.com.tr
    JPA
  • 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 tablolar
    Granülarite Uyumsuzluğu
    Subtype Uyumsuzluğu
    Identity Uyumsuzluğu
    İlişkisel Uyumsuzluklar
    Veriye Erişim Uyumsuzlukları
    Java Nesnelerinde Kalıcılık
    View slide
  • Granülarite Uyumsuzluğu
    public 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;
    }
    View slide
  • 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ştirimi
    Hepsi tek tabloda
    Her biri ayrı tabloda
    Ortak değişkenler tek tabloda vb.
    Subtype Uyumsuzluğu
  • Java’da iki nesne eşitliği:
    a ==b
    a.equals(b)
    VT’de eşitlik
    Primary 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 olabilir
    VT’de ilişki foreign key ile sağlanır
    Tablolar arası ilişki her zaman one-to-one ya da one-to-many
    Many-to-many ilişkilerde üçüncü bir tablo gerekli
    İlişkisel Uyumsuzluklar
    public class User {
    private Set billingDetails;
    ...
    }
    public class BillingDetails {
    private User user;
    // private Set user;
    }
  • Nesne veri erişimi
    VT’de erişim
    Veriye Erişim Uyumsuzlukları
    aUser.getBillingDetails().getAccountNumber()
    select *
    from USERS u
    left outer join BILLING_DETAILS bd on bd.USER_ID = u.USER_ID
    where u.USER_ID = 123
  • Kalıcı veri üzerinde değişiklik yapabilmek için
    select (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 Mapping
    Nesneler ve VT arasında eşleşmenin, tanımlanan metadata bilgileri ile otomatik gerçekleştirilmesi
    Bir gösterimden diğerine dönüşüm işlemi
    (Nesne <-> VT)
    ORM Nedir?
  • Temel CRUD işlemini gerçekleştirebilmek için API
    Sınıf ve nitelikleri tasvir eden SQL benzeri sorgu dili
    Eşleme için metadata tanımlama yöntemi
    Transaction, Concurrency, Caching, Lazy-loading, vb. özellikler
    ORM Çöz. Sunması Gerekenler
  • EJB 3.0 ile tanımlanan Persistence API belirtimi
    Hibernate geliştiricileri JPA belirtiminin oluşturulmasında katkı sağladı.
    Hibernate Modülleri
    Hibernate Core (Varolan Hibernate yetenekleri)
    Hibernate Annotation
    Hibernate 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
    @Embeddable
    public 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 {
    ...
    @Embedded
    private 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)
    @MappedSuperclass
    public 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 / @OneToMany
    public class Phone{
    ...
    @ManyToOne
    @JoinColumn(name = “USER_ID", nullable = false)
    private Useruser;
    ...
    }
    public class User{
    ...
    @OneToMany(mappedBy = “user")
    private Set<Phone> phones= new HashSet<Phone>();
    ...
    }
  • @OneToOne
    public 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