Pada Artikel sebelumnya saya sudah memberikan contoh penerapan teori Weak Entity pada Database dengan menggunakan Composite Primary Key. Nah tentu teman – teman akan bertanya kalau sudah database nya dibuat lalu bagaimana mapping entitas tersebut di sisi pemrograman. Disini saya akan memberikan contoh singkat mapping object serta insert datanya saja…
Saya berasumsi bahwa anda sedikit banyak sudah mengetahui tentang konsep Object Relational Mapping (ORM) dan setidaknya sudah mengerti juga tentang framework ORM seperti Hibernate. Jadi disini saya hanya akan memberikan contoh Class Modelnya saja….
Item.java
importjava.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.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table;</code></p> @Entity @Table(name="item") public class Item implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="item_id") Long id; @Column(name="code") String code; @Column(name="name") String name; @ManyToOne @JoinColumn(name="item_category_id") private ItemCategory itemCategory; public Long getId(){ return id; } public void setId(Long id){ this.id = id; } public String getCode(){ return code; } public void setCode(String code){ this.code = code; } public String getName(){ return name; } public void setName(String name){ this.name = name; } public ItemCategory getItemCategory(){ return itemCategory; } public void setItemCategory(ItemCategory itemCategory){ this.itemCategory = itemCategory; } }
SalesOrder.java
import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="sales_order_detail") public class SalesOrderDetail implements Serializable{ @Id SalesOrderDetailPK salesOrderDetailPK; @Column(name="quantity") private String quantity; @Column(name="price") private String price; public SalesOrderDetail(){ } public SalesOrderDetailPK getSalesOrderDetailPK(){ return salesOrderDetailPK; } public void setSalesOrderDetailPK(SalesOrderDetailPK salesOrderDetailPK){ this.salesOrderDetailPK = salesOrderDetailPK; } public String getQuantity(){ return quantity; } public void setQuantity(String quantity){ this.quantity = quantity; } public String getPrice(){ return price; } public void setPrice(String price){ this.price = price; } }
SalesOrderDetail.java
import java.io.Serializable; import java.util.Set; 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.Table; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; @Entity @Table(name="sales_order") public class SalesOrder implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="sales_order_id") private Long id; @Column(name="number") private String number; @Column(name="description") private String description; @OneToMany(mappedBy="salesOrderDetailPK.salesOrder") @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE}) private Set salesOrderDetail; public SalesOrder(){} public Long getId(){ return id; } public void setId(Long id){ this.id = id; } public String getNumber(){ return number; } public void setNumber(String number){ this.number = number; } public String getDescription(){ return description; } public void setDescription(String description){ this.description = description; } public SetgetSalesOrderDetail(){ return salesOrderDetail; } public void setSalesOrderDetail(Set salesOrderDetail){ this.salesOrderDetail = salesOrderDetail; } }
SalesOrderDetailPK.java
import java.io.Serializable; import javax.persistence.Embeddable; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Embeddable public class SalesOrderDetailPK implements Serializable{ @ManyToOne @JoinColumn(name="sales_order_id") private SalesOrder salesOrder; @ManyToOne @JoinColumn(name="item_id") private Item item; public SalesOrderDetailPK(){ } public SalesOrder getSalesOrder(){ return salesOrder; } public void setSalesOrder(SalesOrder salesOrder){ this.salesOrder = salesOrder; } public Item getItem(){ return item; } public void setItem(Item item){ this.item = item; } public int hashCode(){ int hashCode = 0; if(item <a class="zem_slink" title="Relational operator" href="http://en.wikipedia.org/wiki/Relational_operator" rel="wikipedia" target="_blank">!=</a> null){ hashCode ^= item.hashCode(); } if(salesOrder != null){ hashCode ^= salesOrder.hashCode(); } return hashCode; } public boolean equals(Object obj){ if(!(obj instanceof SalesOrderDetailPK)){ return false; } SalesOrderDetailPK target = (SalesOrderDetailPK)obj; return ((this.item == null) ? (target.item == null) : this.item.equals(target.item) && (this.salesOrder == null) ? (target.salesOrder == null) : this.salesOrder.equals(target.salesOrder) ); } }
SalesOrderController.java (Buat Tester)
@RequestMapping("/tester") public String performTester(){ salesOrder = new SalesOrder(); salesOrder.setNumber("3222"); salesOrder.setDescription("Ghufron Ganteng"); SalesOrderDetailPK pk1 = new SalesOrderDetailPK(); SalesOrderDetailPK pk2 = new SalesOrderDetailPK(); Item item1 = itemService.findById(Long.parseLong("10")); Item item2 = itemService.findById(Long.parseLong("11")); SalesOrderDetail satu = new SalesOrderDetail(); satu.setQuantity("2"); satu.setPrice("322"); satu.setSalesOrderDetailPK(pk1); satu.getSalesOrderDetailPK().setItem(item1); SalesOrderDetail dua = new SalesOrderDetail(); dua.setQuantity("4"); dua.setPrice("321"); dua.setSalesOrderDetailPK(pk2); dua.getSalesOrderDetailPK().setItem(item2); pk1.setSalesOrder(salesOrder); pk2.setSalesOrder(salesOrder); Set detail = new HashSet(); detail.add(satu); detail.add(dua); salesOrder.setSalesOrderDetail(detail); salesOrderService.saveOrUpdate(salesOrder); return "redirect:list.html"; }
Maaf ya kalo postingan nya rada berantakan ntar saya update lagi pake gambar…. Good Luck !