孫衛琴的《精通JPA與Hibernate》讀書筆記:對象-關係的映射概念

孫衛琴的《精通JPA與Hibernate》讀書筆記:對象-關係的映射概念


在這裏插入圖片描述

Java對象和關係數據庫存在一些簡單的映射關係,好比Customer類與CUSTOMERS表映射,一個Customer對象與CUSTOMERS表中的一條記錄映射,Customer類的name屬性與CUSTOMERS表的NAME字段映射。java

可是,畢竟對象模型與數據庫是按照不一樣的思路創建起來的,所以,在很多狀況下,不存在一一對應的關係。好比Java對象之間能夠雙向關聯,而數據庫的表之間只有單向的參照關係,並且老是many方參照one方。表與表之間若是存在雙向參照,須要經過鏈接表來創建對應關係。數據庫

補充:對象模型與數據庫的創建思路到底有啥區別?對象模型須要提升代碼的可重用,避免重複編碼。而數據庫須要減小數據的冗餘,節省存儲空間。markdown

還有Java類有繼承關係,關係數據庫不存在繼承關係。app

JPA與Hibernate會經過各類各樣的映射註解來創建對象對數據庫中記錄的映射。之前Hibernate3如下的版本流行用XML格式的映射文件來創建映射,如今這個方式不那麼流行了。更爲廣泛的是用註解進行映射。ide

如下是用JPA映射註解對Customer類與CUSTOMERS表進行映射。編碼

@Entity
@Table(name="CUSTOMERS")  //Customer類和CUSTOMERS表映射
public class Customer  implements java.io.Serializable {
  @Id
  @GeneratedValue(generator="increment")
  @GenericGenerator(name="increment", strategy = "increment")
  @Column(name="ID")  //Customer類的id屬性和CUSTOMERS表的ID字段映射
  private Long id;

  //Customer類的name屬性和CUSTOMERS表的NAME字段映射
  @Column(name="NAME") 
  private String name;

  //Customer類的age屬性和CUSTOMERS表的AGE字段映射
  @Column(name="AGE")
  private int age;

 //Customer類與Order類一對多關聯
  @OneToMany(mappedBy="customer",
             targetEntity=Order.class,
             orphanRemoval=true,
             cascade=CascadeType.ALL)
  private Set<Order> orders = new HashSet<Order>();
  ……
}
相關文章
相關標籤/搜索