一步步學習Hibernate架構(三):採用jpa實現一對多關聯映射(一)

來源:互聯網
上載者:User

標籤:架構   jpa   技術   jdk   注釋   

       JPA(Java Persistence API)是Sun官方提出的一種Java持久化規範。為Java開發人員提供了一種對象/關係映射工具,管理Java應用中的關係資料。JPA的總體思想和現有Hibernate、TopLink等ORM架構大體一致。總的來說,JPA包括以下3方面的技術:
第一:ORM映射中繼資料
       JPA支援XML和JDK 注釋(也可譯作註解)兩種中繼資料的形式,中繼資料描述對象和表之間的映射關係,架構據此將實體物件持久化到資料庫表中。
第二:Java持久化API
       用來操作實體物件,執行CRUD操作,架構在後台替我們完成所有的事情,開發人員可以從繁瑣的JDBC和SQL代碼中解脫出來。
第三:查詢語言

        這是持久化操作中很重要的一個方面,通過物件導向而非面向資料庫的查詢語言查詢資料,避免程式的SQL語句緊密耦合。

       現在就用第一種技術來實現一對多的映射,對應到mysql中。一對多的處理有兩種處理方式,第一種是映射成第三張表,第二種是映射成主外鍵關係。

     需要引用的jar包除了hibernate的jar包,還有:

       

第一種:以一的主鍵作為多的外鍵

Group.java

package com.tgb.zhudan;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="t_group")public class Group {private int id;private String name;private List<User> user;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*@OneToMany*/@OneToMany(cascade = CascadeType.ALL, mappedBy = "id")//指向多的那方的pojo的關聯外鍵欄位     public List<User> getUser() {return user;}public void setUser(List<User> user) {this.user = user;}}

User.java

package com.tgb.zhudan;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="t_group")public class Group {private int id;private String name;private List<User> user;@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*@OneToMany*/@OneToMany(cascade = CascadeType.ALL, mappedBy = "id")//指向多的那方的pojo的關聯外鍵欄位     public List<User> getUser() {return user;}public void setUser(List<User> user) {this.user = user;}}
hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_jpa_one2many</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.show_sql">true</property><mapping class="com.tgb.zhudan.Group"/><mapping class="com.tgb.zhudan.User"/></session-factory></hibernate-configuration>
ExportDB:

package com.tgb.zhudan;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;/** * 將hbm產生ddl * @author Administrator * */public class ExportDB {public static void main(String[] args) {//預設讀取hibernate.cfg.xml檔案Configuration cfg = new AnnotationConfiguration().configure();SchemaExport export = new SchemaExport(cfg);export.create(true, true);}}
產生的資料庫表如下:
 t_group表:

             

t_user表:

     

       總結:從上面的兩張資料表可以看到一端(t_group)的id作為了外鍵存在了多端(t_user),產生一個叫group_id的欄位作為一端(t_group)的在多端(t_user)的外鍵。

       如果我想讓這種一對多關聯性的實體在資料庫中的體現是第三種表而不是外鍵關係,那麼我又應該怎麼寫jpa註解呢?下篇部落格我們再說。 

一步步學習Hibernate架構(三):採用jpa實現一對多關聯映射(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.