Jpa

1,888 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,888
On SlideShare
0
From Embeds
0
Number of Embeds
30
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jpa

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

×