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 tablolar Granülarite Uyumsuzluğu Subtype Uyumsuzluğu Identity Uyumsuzluğu İlişkisel Uyumsuzluklar Veriye Erişim Uyumsuzlukları Java Nesnelerinde Kalıcılık
4. 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; }
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ştirimi Hepsi tek tabloda Her biri ayrı tabloda Ortak 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şitlik Primary 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 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; }
9. 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
10. 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
11. 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?
12. 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
13. 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?
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; ...
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 / @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>(); ... }
21. @OneToOne public class User { ... @OneToOne @JoinColumn(name="SHIPPING_ADDRESS_ID") private Address shippingAddress; ... } public class Address { ... @OneToOne(mappedBy = "shippingAddress") private User user; ... }