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>(); …… }