Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau...

15
Persistence Sederhana dengan NetBeans Oleh : Eko Zulkaryanto http://zulkaryanto.wordpress.com Sumber : http://jasoet.wordpress.com/2008/11/10/persistence-sederhana-dengan-netbeans-2/ Tutorial ini mengambil ide dari tutorial yang ada di blognya Mas Hendro . Yaitu tentang pengenalan Swing Framework dan Beans Binding. Persistence di Java masuk dalam Java Persistence Api atau JPA. JPA mempunyai kemampuan yang cukup “Mantap” yaitu kita benar-benar tidak berurusan dengan database. “Lho Tablenya gimana ?”. Nah tablenya akan dibuatkan sendiri oleh JPA. Beberapa hal yang perlu diperhatikan : Kita hanya perlu paham pendekatan Object Oriented Table dalam database akan di generate otomatis bedasarkan entity class yang kita buat. Ada beberapa library JPA yang bisa digunakan antara lain TopLink dan Hibernate. Untuk memulainya silahkan buka NetBeans (dalam tutorial ini saya menggunakan NetBeans 6.5 RC 2). Kemudian buat sebuah project baru dan beri nama “TestInventory”. Tipe project yang digunakan adalah Java Aplication. Pastikan untuk meng-uncheck option “Create Main Class”. Buat sebuah database baru pada MySQL atau JavaDB dan pastikan NetBeans sudah terhubung dengan database tersebut. Buat sebuah sebuah Persistence Unit pada project yang baru saja dibuat. Persistence Unit dapat di temukan pada New File -> Categori Persistence. Kemudian pastikan koneksi database yang terpilih sesuai dengan database yang tadi kita buat. Untuk library silahkan pilih yang diinginkan tetapi pada tutorial ini saya menggunakan Hibernate.

Transcript of Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau...

Page 1: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

Persistence Sederhana dengan NetBeans

Oleh : Eko Zulkaryanto http://zulkaryanto.wordpress.com

Sumber : http://jasoet.wordpress.com/2008/11/10/persistence-sederhana-dengan-netbeans-2/

Tutorial ini mengambil ide dari tutorial yang ada di blognya Mas Hendro. Yaitu tentang pengenalan

Swing Framework dan Beans Binding.

Persistence di Java masuk dalam Java Persistence Api atau JPA. JPA mempunyai kemampuan yang

cukup “Mantap” yaitu kita benar-benar tidak berurusan dengan database. “Lho Tablenya gimana ?”.

Nah tablenya akan dibuatkan sendiri oleh JPA.

Beberapa hal yang perlu diperhatikan :

Kita hanya perlu paham pendekatan Object Oriented

Table dalam database akan di generate otomatis bedasarkan entity class yang kita buat.

Ada beberapa library JPA yang bisa digunakan antara lain TopLink dan Hibernate.

Untuk memulainya silahkan buka NetBeans (dalam tutorial ini saya menggunakan NetBeans 6.5 RC 2).

Kemudian buat sebuah project baru dan beri nama “TestInventory”. Tipe project yang digunakan

adalah Java Aplication. Pastikan untuk meng-uncheck option “Create Main Class”.

Buat sebuah database baru pada MySQL atau JavaDB dan pastikan NetBeans sudah terhubung dengan database tersebut.

Buat sebuah sebuah Persistence Unit pada project yang baru saja dibuat. Persistence Unit dapat di temukan pada New File -> Categori Persistence. Kemudian pastikan koneksi database yang terpilih sesuai dengan database yang tadi kita buat. Untuk library silahkan pilih yang diinginkan tetapi pada tutorial ini saya menggunakan Hibernate.

Page 2: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

Kemudian buat dua buah Entity Class yaitu Kategori dan Produk kemudian masukkan dalam Package

org.jasoet.model atau sesuai dengan keiinginan. File tipe Entity Class dapat ditemukan pada New File ->

Categori Persistence.

Kemudian sesuaikan dengan source code dibawah ini.

Kelas org.jasoet.model.Kategori //Class org.jasoet.model.Kategori

package org.jasoet.model;

import java.beans.PropertyChangeSupport;

import java.io.Serializable;

import java.util.List;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.Transient;

/**

*

* @author Deny Prasetyo

*/

@Entity

public class Kategori implements Serializable {

@Transient

private PropertyChangeSupport changeSupport = new PropertyChangeSuppor

t(this);

private static final long serialVersionUID = 1263464563453L;

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Column(name = "name", length = 100)

private String name;

@Column(name = "decription", length = 200)

private String description;

@OneToMany(mappedBy = "kategori")

private List<Produk> listProduct;

public List<Produk> getListProduct() {

return listProduct;

}

public void setListProduct(List<Produk> listProduct) {

this.listProduct = listProduct;

}

Page 3: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

public String getDescription() {

return description;

}

public void setDescription(String description) {

String oldValue = this.description;

this.description = description;

changeSupport.firePropertyChange("description", oldValue, this.des

cription);

}

public String getName() {

return name;

}

public void setName(String name) {

String oldValue = this.name;

this.name = name;

changeSupport.firePropertyChange("name", oldValue, this.name);

}

public Long getId() {

return id;

}

public void setId(Long id) {

Long oldValue = this.id;

this.id = id;

changeSupport.firePropertyChange("id", oldValue, this.id);

}

@Override

public int hashCode() {

int hash = 0;

hash += (id != null ? id.hashCode() : 0);

return hash;

}

@Override

public boolean equals(Object object) {

// TODO: Warning -

this method won't work in the case the id fields are not set

if (!(object instanceof Kategori)) {

return false;

}

Kategori other = (Kategori) object;

if ((this.id == null &amp;&amp; other.id != null) || (this.id != n

ull &amp;&amp; !this.id.equals(other.id))) {

return false;

}

return true;

}

@Override

public String toString() {

return "org.jasoet.model.Kategori[id=" + id + "]";

}

}

Page 4: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

Kelas org.jasoet.model.Produk //Class org.jasoet.model.Produk

package org.jasoet.model;

import java.beans.PropertyChangeSupport;

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.ManyToOne;

import javax.persistence.Transient;

/**

*

* @author Deny Prasetyo

*/

@Entity

public class Produk implements Serializable {

@Transient

private PropertyChangeSupport changeSupport = new PropertyChangeSupport(th

is);

private static final long serialVersionUID = 134674453247658L;

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private Long id;

@Column(name = "name", length = 100)

private String name;

@Column(name = "decription", length = 200)

private String description;

@Column(name = "price", length = 15)

private double price;

@ManyToOne

private Kategori kategori;

public Long getId() {

return id;

}

public void setId(Long id) {

Long oldValue = this.id;

this.id = id;

changeSupport.firePropertyChange("id", oldValue, this.id);

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

String oldValue = this.description;

this.description = description;

changeSupport.firePropertyChange("name", oldValue, this.description);

}

Page 5: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

public String getName() {

return name;

}

public void setName(String name) {

String oldValue = this.name;

this.name = name;

changeSupport.firePropertyChange("name",oldValue,this.name);

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

double oldValue = this.price;

this.price = price;

changeSupport.firePropertyChange("price", oldValue, this.price);

}

public Kategori getKategori() {

return kategori;

}

public void setKategori(Kategori kategori) {

Kategori oldValue = this.kategori;

this.kategori = kategori;

changeSupport.firePropertyChange("kategori", oldValue, this.kategori);

}

@Override

public int hashCode() {

int hash = 0;

hash += (id != null ? id.hashCode() : 0);

return hash;

}

@Override

public boolean equals(Object object) {

// TODO: Warning -

this method won't work in the case the id fields are not set

if (!(object instanceof Produk)) {

return false;

}

Produk other = (Produk) object;

if ((this.id == null &amp;&amp; other.id != null) || (this.id != null &amp

;&amp; !this.id.equals(other.id))) {

return false;

}

return true;

}

@Override

public String toString() {

return "org.jasoet.model.Produk[id=" + id + "]";

}

Page 6: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

}

Perhatikan penggunaan anotasi (@blablabla) pada kode diatas anotasi tersebut nantinya akan

digunakan untuk menggenerate tabel. Untuk lebih jelas mengenai @Anotasi pada Persistence API

silahkan download buku berjudul “Java Persistence with Hibernate” di link-link bagian tutorial pada

blog ini.

Setelah membuat dua buah entity class kemudian buat dua buah kelas DAO yaitu KategoriDAO dan

ProdukDAO. Kelas DAO merupakan Java Class biasa. Dua kelas tersebut nantinya akan digunakan

untuk fungsi CRUD (Create, Read, Update, Delete) pada database. Masukkan dua buah kelas tersebut

kedalam package org.jasoet.dao

Sesuaikan dengan Code dibawah ini.

Kelas org.jasoet.dao.KategoriDAO //Class org.jasoet.dao.KetegoriDAO

package org.jasoet.dao;

import java.util.List;

import javax.persistence.EntityManager;

import org.jasoet.model.Kategori;

/**

*

* @author Deny Prasetyo

*/

public class KategoriDAO {

private EntityManager em;

public KategoriDAO(EntityManager em) {

this.em = em;

}

public void save(Kategori prod) {

if (prod.getId() == null) {

em.persist(prod);

} else {

em.merge(prod);

}

}

public void delete(Kategori prod) {

em.remove(prod);

}

public Kategori getKategori(Long id) {

return em.find(Kategori.class, id);

}

public List getProdudct() {

return em.createQuery("select p from Kategori p").getResultList();

}

}

Kemudian untuk Kelas org.jasoet.dao.ProductDAO //Class org.jasoet.dao.ProductDAO

package org.jasoet.dao;

import java.util.List;

import javax.persistence.EntityManager;

Page 7: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

import org.jasoet.model.Produk;

/**

*

* @author Deny Prasetyo

*/

public class ProdukDAO {

private EntityManager em;

public ProdukDAO(EntityManager em) {

this.em = em;

}

public void save(Produk prod) {

if (prod.getId() == null) {

em.persist(prod);

} else {

em.merge(prod);

}

}

public void delete(Produk prod) {

em.remove(prod);

}

public Produk getProduk(Long id) {

return em.find(Produk.class, id);

}

public List getProdudct() {

return em.createQuery("select p from Produk p").getResultList();

}

}

Setelah selesai sekarang kita tinggal membuat main class untuk mengetest apakah program kita telah

berjalan dengan baik.

Kelas org.jasoet.TestMain //Class org.jasoet.TestMain

package org.jasoet;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

import org.jasoet.dao.KategoriDAO;

import org.jasoet.dao.ProdukDAO;

import org.jasoet.model.Kategori;

import org.jasoet.model.Produk;

/**

*

* @author Deny Prasetyo

*/

public class TestMain {

private EntityManagerFactory emf = Persistence.createEntityManagerFact

ory("TestInventoryPU");

Page 8: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

public void doTest() {

EntityManager em = emf.createEntityManager();

KategoriDAO kdao = new KategoriDAO(em);

Kategori kat = new Kategori();

kat.setName("Sepatu");

kat.setDescription("Segala Jenis Sepatu dan Sepatu sandal");

ProdukDAO pdao = new ProdukDAO(em);

Produk p = new Produk();

p.setKategori(kat);

p.setName("Kazoot");

p.setPrice(40000);

p.setDescription("Sepatu bermerek");

em.getTransaction().begin();

kdao.save(kat);

pdao.save(p);

em.getTransaction().commit();

}

public void doTestDua(){

EntityManager em = emf.createEntityManager();

ProdukDAO pdao = new ProdukDAO(em);

Produk p = pdao.getProduk(1l);

System.out.println(p.getName());

System.out.println(p.getKategori().getName());

System.out.println(p.getPrice());

}

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

TestMain tm = new TestMain();

tm.doTest();

tm.doTestDua();

}

}

Kita akan membahas kode program pada MainClass diatas.

1. Pada baris awal terdapat deklarasi EntityManagerFactory ini digunakan untuk menjalankan

Persistence Library yang sudah di definisikan pada Persistence Unit (persistence.xml) sesuai dengan

nama parameter yang dimasukkan dalam hal ini TestInventoryPU;

2. Pada methode doTest() terdapat deklarasi EntityManager yang diambil dari Object

EntityManagerFactory. Ketika EntityManager di deklarasikan maka table pada database akan

digenerate.

3. Kemudian pada doTest() dilakukan insert satu buah object Kategori dan satu buah object Produk.

Perhatikan bagian em.getTransaction().begin() dan

em.getTransaction().commit() Ini merupakan pembuka dan penutup Transaction pada

database. Sedangkan untuk bagian kdao.save() dan pdao.save() merupakan pemanggilan fungsi

untuk menyimpan data.

4. Pada methode doTestDua() isi dari table pada database diambil kemudian ditampilkan.

Jalankan program kemudian amati output dan juga table pada database.

Segitu dulu posting untuk kali ini. Kalau ada pertanyaan hubungi [email protected]

Page 9: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

Inheritance Pada Java Persistence Api (JPA)

Oleh : Eko Zulkaryanto Sumber : http://jasoet.wordpress.com/2008/11/12/inheritance-pada-java-persistence-api-jpa/

Pada postingan sebelumnya kita telah sedikit mencoba Java Persistence Api menggunakan NetBeans.

Disinggung sedikit bahwa dengan JPA kita bisa buat aplikasi menggunakan database tapi tidak perlu

berurusan dengan struktur table ataupun SQL. Table dalam database akan di generate oleh JPA

berdasarkan Entity class yang kita definisikan.

Sekarang kalau ada yang bertanya. “Kalau Table dalam database digenerate berdasarkan Entity class yang

berkonsep OOP. Nah gimana ceritanya kalau Entity Class tersebut menggunakan konsep Inheritance ?”.

Lebih baik kita lihat contoh program dibawah ini moga-moga bisa menjawab pertanyaan tersebut oh iya

posting ini berdasarkan postingan salah satu blog yang muncul di web wordpress ini.

Buat sebuah project baru dengan nama “InheritanceJPA”. Tipe project yang digunakan adalah Java

Aplication. Pastikan untuk meng-uncheck option “Create Main Class”.

Buat sebuah database baru pada MySQL atau JavaDB dan pastikan NetBeans sudah terhubung dengan

database tersebut.

Setelah membuat database dan database tersebut telah terkoneksi dengan NetBeans selanjutnya buat sebuah

Persistence Unit dan koneksikan Persistence Unit tersebut dengan database yang telah dibuat.Bisa lihat

postingan sebelumnya untuk langkah-langkah diatas.

Sekarang baru kita coba untuk membuat Entity Class. Entity Class yang akan kita buat ada empat yaitu ModelBase, Article, BookArticle dan MagazineArticle dan kalau kita lihat Class diagramnya akan terlihat seperti ini.

Page 10: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

Bisa dilihat Class Article turunan dari Class ModelBase sedangkan Class MagazieArticle dan BookArticle

turunan dari Class Article. Sekarang coba kita lihat code dari ke empat Class tersebut.

Class ModelBase package org.jasoet.model;

import java.io.Serializable;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.MappedSuperclass;

/**

*

* @author Deny Prasetyo

*/

@MappedSuperclass

public abstract class ModelBase implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.AUTO)

private Long id;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

}

Class Article package org.jasoet.model;

Page 11: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

import javax.persistence.DiscriminatorColumn;

import javax.persistence.DiscriminatorType;

import javax.persistence.Entity;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;

/**

*

* @author Deny Prasetyo

*/

@Entity

@Inheritance(strategy=InheritanceType.JOINED)

@DiscriminatorColumn(discriminatorType=DiscriminatorType.INTEGER, name="ar

ticleTypeId")

public abstract class Article extends ModelBase {

private String articleId;

private String title;

private String summary;

private String url;

public String getArticleId() {

return articleId;

}

public void setArticleId(String articleId) {

this.articleId = articleId;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getSummary() {

return summary;

}

public void setSummary(String summary) {

this.summary = summary;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

}

Class MagazineArticle package org.jasoet.model;

import java.util.Date;

Page 12: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

import javax.persistence.DiscriminatorValue;

import javax.persistence.Entity;

import javax.persistence.Temporal;

import javax.persistence.TemporalType;

/**

*

* @author Deny Prasetyo

*/

@Entity

@DiscriminatorValue("1")

public class MagazineArticle extends Article {

private static final long serialVersionUID = 4276734517833727032L;

private String publicationName;

@Temporal(TemporalType.DATE)

private Date publicationDate;

public String getPublicationName() {

return publicationName;

}

public void setPublicationName(String publicationName) {

this.publicationName = publicationName;

}

public Date getPublicationDate() {

return publicationDate;

}

public void setPublicationDate(Date publicationDate) {

this.publicationDate = publicationDate;

}

public String getAuthorName() {

return authorName;

}

public void setAuthorName(String authorName) {

this.authorName = authorName;

}

}

Class BookArticle package org.jasoet.model;

import javax.persistence.DiscriminatorValue;

import javax.persistence.Entity;

/**

*

* @author Deny Prasetyo

*/

@Entity

@DiscriminatorValue("2")

public class BookArticle extends Article {

Page 13: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

private static final long serialVersionUID = -6145145462382485655L;

private String authorName;

private String publisherName;

private String isbnNumber;

public String getAuthorName() {

return authorName;

}

public void setAuthorName(String authorName) {

this.authorName = authorName;

}

public String getPublisherName() {

return publisherName;

}

public void setPublisherName(String publisherName) {

this.publisherName = publisherName;

}

public String getIsbnNumber() {

}

public void setIsbnNumber(String isbnNumber) {

this.isbnNumber = isbnNumber;

}

}

1. Oh ya jangan lupa masukkan ke empat Class tadi kedalam packet org.jasoet.model atau nama yang

dianda sukai. Biasakan menamai package dengan nama yang mencerminkan sifat Class-Class yang

ada didalamnya.

2. Kemudian daftarkan Class-Class tersebut ke dalam Persistence Unit. Buka file persistence.xml

kemudian pilih bagian Design dan pilih tombol “Add Class” kemudian tambahkan semua Class yang

sudah dibuat sebelumnya.

Setelah itu buat sebuah Main Class untuk mencoba apakah program kita sudah benar.

Class MainClass package org.jasoet;

import java.util.Calendar;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

Page 14: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

import javax.persistence.Query;

import org.jasoet.model.Article;

import org.jasoet.model.BookArticle;

import org.jasoet.model.MagazineArticle;

/**

*

* @author Deny Prasetyo

*/

public class MainClass {

private EntityManager entityManager;

private EntityManagerFactory entityManagerFactory;

public MainClass() {

entityManagerFactory = Persistence.createEntityManagerFactory("Inheritance

JPAPU");

entityManager = entityManagerFactory.createEntityManager();

}

public void doTest() {

// build and persist a magazine article

MagazineArticle ma = new MagazineArticle();

ma.setArticleId("mag-000-001");

ma.setTitle("Magazine Article Title 1");

ma.setSummary("This is a short summary of magazine article 0001...");

ma.setUrl("/path/to/mag-art-0001");

Calendar pubDateCalendar = Calendar.getInstance();

pubDateCalendar.set(2002, 11, 15);

ma.setPublicationDate(pubDateCalendar.getTime());

ma.setPublicationName("Harper Collins");

ma.setAuthorName("Dr Doolittle");

entityManager.getTransaction().begin();

entityManager.persist(ma);

entityManager.getTransaction().commit();

// build and persist a book article

BookArticle ba = new BookArticle();

ba.setArticleId("bk-000-001");

ba.setTitle("Book Article Title 1");

ba.setSummary("This is a short summary of book article 0001...");

ba.setUrl("/path/to/book-art-0001");

ba.setAuthorName("Dr Busybody");

ba.setPublisherName("Tom Collins");

ba.setIsbnNumber("1234-5678");

entityManager.getTransaction().begin();

entityManager.persist(ba);

entityManager.getTransaction().commit();

// select all articles

Query q = entityManager.createQuery("select a from Article a");

List results = q.getResultList();

for (Article result : results) {

System.out.println(result.toString());

}

Page 15: Persistence Sederhana dengan NetBeans · PDF fileBuat sebuah database baru pada MySQL atau JavaDB ... mencoba Java Persistence Api menggunakan NetBeans. ... contoh program dibawah

}

public static void main(String[] args) {

MainClass mc = new MainClass();

mc.doTest();

}

}

Jika sudah kemudian jalankan program. Sekarang perhatikan struktur table yang telah dibuat pada database. Ternyata struktur database untuk Entity Class dengan Inheritance menggunakan relasional OnetoOne. Seperti pada gambar dibawah :

Kesimpulan ternyata konsep Inheritance di OOP dapat diterapkan juga di Relational Database dan juga apabila kita menggunakan JPA kita diberi kemudahan karena tidak perlu mendesain table secara manual dan kita hanya perlu paham terhadap konsep OOP.