精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

精通Hibernate:映射一對多關(guān)聯(lián)關(guān)系

開發(fā) 后端
在域模型中,類和類之間最普通的關(guān)系就是關(guān)聯(lián)關(guān)系。在UML語言中,關(guān)聯(lián)是有方向的。以客戶(Customer)和訂單(Order)的關(guān)系為例,一個(gè)客戶可以發(fā)出多個(gè)訂單,而一個(gè)訂單只能屬于一個(gè)客戶。

在域模型中,類和類之間最普通的關(guān)系就是關(guān)聯(lián)關(guān)系。在UML語言中,關(guān)聯(lián)是有方向的。以客戶(Customer)和訂單(Order)的關(guān)系為例,一個(gè)客戶可以發(fā)出多個(gè)訂單,而一個(gè)訂單只能屬于一個(gè)客戶。

從Order到Customer的關(guān)聯(lián)是多對一關(guān)聯(lián),這意味著每個(gè)Order對象都會(huì)引用一個(gè)Customer對象,因此在Order類中應(yīng)該定義一個(gè)Customer類型的屬性,來引用所關(guān)聯(lián)的Customer對象。

從Customer到Order的關(guān)聯(lián)是一對多的關(guān)聯(lián),這意味著每個(gè)Customer對象都會(huì)引用一組Order對象,因此在Customer類中應(yīng)該定義一個(gè)集合類型的屬性,來引用所有關(guān)聯(lián)的Order對象。

一、建立多對一的單向關(guān)聯(lián)關(guān)系

如上例中,我們只需在Order類中定義一個(gè)customer屬性,而在Customer類中無需定義存放Order對象的集合屬性。

Order.java

  1. package mypack;  
  2.  
  3. public class Order  implements java.io.Serializable {  
  4.      private long id;  
  5.      private String orderNumber;  
  6.      private Customer customer;//定義一個(gè)Customer屬性  
  7.  
  8.     public Order() {  
  9.     }  
  10.  
  11.     public Order(Customer customer) {  
  12.         this.customer = customer;  
  13.     }  
  14.     public Order(String orderNumber, Customer customer) {  
  15.        this.orderNumber = orderNumber;  
  16.        this.customer = customer;  
  17.     }  
  18.      
  19.    //省略了id,orderNumber的構(gòu)造方法  
  20.     public Customer getCustomer() {  
  21.         return this.customer;  
  22.     }  
  23.       
  24.     public void setCustomer(Customer customer) {  
  25.         this.customer = customer;  
  26.     }  
  27.  

Customer類的所有屬性都是和CUSTOMERS表中的字段一一對應(yīng),因此可以直接使用如下的映射代碼:

  1. <class name="mypack.Customer" table="CUSTOMERS" >  
  2.    <id name="id" type="long" column="ID">  
  3.      <generator class="increment"/>  
  4.    </id>  
  5.  
  6.    <property name="name" type="string" >  
  7.        <column name="NAME" length="15" />  
  8.    </property>  
  9.        
  10.  </class

Order類的orderNumber屬性和ORDERS表中ORDER_NUMBER字段對應(yīng),映射代碼和上面類似,此處省去。我們關(guān)注的主要地方是,Order類中的customer屬性,因?yàn)樗荂ustomer類型的,是與ORDERS表的外鍵CUSTOMER_ID對應(yīng)的,它的真實(shí)值是存在CUSTOMERS表中而ORDERS表存的只是對它的引用,因此customer的映射方法不能如上面一樣。

  1. <many-to-one  
  2.         name="customer" 
  3.         column="CUSTOMER_ID" 
  4.         class="mypack.Customer" 
  5.         not-null="true"   
  6.         lazy="false" 
  7. /> 

使用方法のBussiness.java演示:

  1. package mypack;  
  2.  
  3. import org.hibernate.*;  
  4. import org.hibernate.cfg.Configuration;  
  5. import java.util.*;  
  6.  
  7. public class BusinessService{  
  8.   public static SessionFactory sessionFactory;  
  9.   static{  
  10.      try{  
  11.       // 初始化  
  12.        Configuration config = new Configuration();  
  13.        config.configure();  
  14.        sessionFactory = config.buildSessionFactory();  
  15.     }catch(RuntimeException e){e.printStackTrace();throw e;}  
  16.   }  
  17. /*根據(jù)參數(shù)指定customer的customer_id找出記錄*/ 
  18.   public List findOrdersByCustomer(Customer customer){  
  19.     Session session = sessionFactory.openSession();  
  20.     Transaction tx = null;  
  21.     try {  
  22.       tx = session.beginTransaction();  
  23.  
  24.       List orders=session.createQuery("from Order as o where o.customer.id="+customer.getId())  
  25.                          .list();  
  26.       //Hibernate執(zhí)行:select * from ORDERS where CUSTOMER_ID=customer.getId();  
  27.       tx.commit();  
  28.       return orders;  
  29.     }catch (RuntimeException e) {  
  30.       if (tx != null) {  
  31.         tx.rollback();  
  32.       }  
  33.       throw e;  
  34.     } finally {  
  35.       session.close();  
  36.     }  
  37.   }  
  38. /*根據(jù)OID找出指定customer_id的記錄*/ 
  39.   public Customer findCustomer(long customer_id){  
  40.     Session session = sessionFactory.openSession();  
  41.     Transaction tx = null;  
  42.     try {  
  43.       tx = session.beginTransaction();  
  44.       Customer customer=(Customer)session.get(Customer.class,new Long(customer_id));  
  45.       tx.commit();  
  46.       return customer;  
  47.     }catch (RuntimeException e) {  
  48.       if (tx != null) {  
  49.         tx.rollback();  
  50.       }  
  51.       throw e;  
  52.     } finally {  
  53.       session.close();  
  54.     }  
  55.   }  
  56.  
  57. /*    
  58.     public void saveCustomerAndOrderWithCascade(){  
  59.     Session session = sessionFactory.openSession();  
  60.     Transaction tx = null;  
  61.     try {  
  62.       tx = session.beginTransaction();  
  63.  
  64.       Customer customer=new Customer("Jack");//創(chuàng)建一個(gè)Customer持久化對象  
  65.       //不保存customer對象,這樣執(zhí)行的話會(huì)出現(xiàn)異常  
  66.       Order order1=new Order("Jack_Order001",customer);  
  67.       Order order2=new Order("Jack_Order002",customer);//創(chuàng)建兩個(gè)Order對象  
  68.  
  69.       session.save(order1);  
  70.       session.save(order2);  
  71.  
  72.       tx.commit();  
  73.  
  74.     }catch (RuntimeException e) {  
  75.       if (tx != null) {  
  76.         tx.rollback();  
  77.       }  
  78.       e.printStackTrace();  
  79.     } finally {  
  80.       session.close();  
  81.     }  
  82.   }  
  83.  
  84. */  public void saveCustomerAndOrder(){  
  85.     Session session = sessionFactory.openSession();  
  86.     Transaction tx = null;  
  87.     try {  
  88.       tx = session.beginTransaction();  
  89.  
  90.       Customer customer=new Customer("Tom");//創(chuàng)建一個(gè)Customer持久化對象  
  91.       session.save(customer);  
  92.  
  93.       Order order1=new Order("Tom_Order001",customer);  
  94.       Order order2=new Order("Tom_Order002",customer);//創(chuàng)建兩個(gè)Order對象  
  95.       session.save(order1);  
  96.       session.save(order2);  
  97.      // 對同一個(gè)customerHibernate執(zhí)行兩次插入ORDERS表  
  98.       tx.commit();  
  99.  
  100.     }catch (RuntimeException e) {  
  101.       if (tx != null) {  
  102.         tx.rollback();  
  103.       }  
  104.       throw e;  
  105.     } finally {  
  106.       session.close();  
  107.     }  
  108.   }  
  109.     
  110.   public void printOrders(List orders){  
  111.       for (Iterator it = orders.iterator(); it.hasNext();) {  
  112.          Order order=(Order)it.next();  
  113.          System.out.println("OrderNumber of "+order.getCustomer().getName()+ " :"+order.getOrderNumber());  
  114.       }  
  115.   }  
  116.  
  117.    public void test(){  
  118.       saveCustomerAndOrder();  
  119.     //  saveCustomerAndOrderWithCascade();  
  120.       Customer customer=findCustomer(1);  
  121.       List orders=findOrdersByCustomer(customer);  
  122.       printOrders(orders);  
  123.   }  
  124.  
  125.   public static void main(String args[]){  
  126.     new BusinessService().test();  
  127.     sessionFactory.close();  
  128.   }  
  129. }  
  130. <span style="font-size:16px;color:#cc33cc;"><strong>  
  131. </strong></span> 

上述代碼中方法 saveCustomerAndOrderWithCascade()如果沒有session.save(customer)這一句,

執(zhí)行時(shí)會(huì)拋出PropertyValueException異常,主要原因是:

在調(diào)用session.save(order1)方法之前,order1和customer對象都是臨時(shí)的,臨時(shí)對象是由new創(chuàng)建的,都是沒有持久化的對象。假設(shè) session.save(order1)被成功執(zhí)行,order1會(huì)被成功持久化,變成持久化對象,但是Hibernate不會(huì)自動(dòng)持久化order1所關(guān)聯(lián)的customer對象。

在執(zhí)行session.save(order1)時(shí),插入ORDERS表記錄的CUSTOMER_ID字段為null,這違反了數(shù)據(jù)庫完整性約束,即ORDERS表中不允許CUSTOMER_ID為null。

疑問假設(shè)ORDERS表中CUSTOMER_ID字段允許為null:

  1. <many-to-one  
  2.         name="customer" 
  3.         column="CUSTOMER_ID" 
  4.         class="mypack.Customer" 
  5.         not-null="false"   
  6.         lazy="false" 
  7.      /> 

這樣執(zhí)行的話,能夠成功的向ORDERS表中插入兩條數(shù)據(jù);但是當(dāng)Hibernate自動(dòng)清理(flush)緩存中所有持久化對象時(shí),又會(huì)拋出新的異常

  1. org.hibernate.TransientObjectException:object references an unsaved transient instance -save the transient instance before flushing :mypack.Customer 

所謂清理是指Hibernate按照持久化對象的屬性變化來同步更新數(shù)據(jù)庫。在清理的時(shí)候Hibernate會(huì)發(fā)現(xiàn)order1和order2都引用臨時(shí)對象customer,而在ORDERS表中CUSTOMER_ID字段為null,這就意味著內(nèi)存中持久化對象的屬性和數(shù)據(jù)庫中記錄不一致。之所以會(huì)報(bào)錯(cuò)是因?yàn)閛rder1中customer屬性引用了一個(gè)臨時(shí)對象Customer。

由此可見,Hibernate持久化一個(gè)對象時(shí),默認(rèn)情況下不會(huì)自動(dòng)持久化所關(guān)聯(lián)的其他對象。但是,我們我們希望當(dāng)Hibernate持久化Order對象時(shí)自動(dòng)持久化所關(guān)聯(lián)的Customer對象,我們可以修改映射文件如下:

  1. <many-to-one  
  2.         name="customer" 
  3.         column="CUSTOMER_ID" 
  4.         class="mypack.Customer" 
  5.         cascade="save-update" 
  6.         not-null="false"   
  7.         lazy="false" 
  8.      /> 

當(dāng)cascade屬性為“save-update”,表明保存或更新對象時(shí),會(huì)級聯(lián)保存或更新與它所關(guān)聯(lián)的對象。如上例中,執(zhí)行saveCustomerAndOrderWithCascade()時(shí),Hibernate會(huì)把order1與customer對象一起持久化,此時(shí)Hibernate會(huì)執(zhí)行

  1. insert into CUSTOMERS(ID,NAME) values(2,"Jack");  
  2. insert into ORDERS(ID,ORDER_NUMBER,CUSTOMER_ID) value (3,"Jack_Order001",2); 

#p#

二、映射一對多雙向關(guān)聯(lián)關(guān)系

類類之間建立了聯(lián)系,就可以很方便地從一個(gè)對象導(dǎo)航到另一個(gè)或者另一組與它相關(guān)聯(lián)的對象。正如上例中,對于給定的Order對象,如果想獲得與之關(guān)聯(lián)的Customer對象,可以直接如下調(diào)用:

  1. Customer customer=order.getCustomer(); 

那么對于給定的Customer對象,如何一次獲得所有與之關(guān)聯(lián)的Order對象呢?由于上例中Customer對象沒有和Order對象關(guān)聯(lián),我們也可以通過Hibernate API去查詢數(shù)據(jù)庫:

  1. List orders=session.createQuery("from Order as o where o.customer.id="+customer.getId()).list(); 

顯然這樣做的效率會(huì)很低,而且復(fù)雜的關(guān)聯(lián)關(guān)系也會(huì)給編程帶來影響。我們可以為Customer類和Order類簡歷一對多的雙向關(guān)聯(lián)。

第一部分我們已經(jīng)建立了Order類和Customer類的多對一關(guān)聯(lián),現(xiàn)在我們再增加Customer到Order類的一對多關(guān)聯(lián)。

Customer.java文件:

  1. package mypack;  
  2. import java.util.HashSet;  
  3.  
  4. import java.util.Set;  
  5. //Hibernate要求在持久化類中定義集合類屬性時(shí),必須要把屬性聲明為接口類型。  
  6.  
  7. public class Customer  implements java.io.Serializable {  
  8.      private long id;  
  9.      private String name;  
  10.      private Set orders = new HashSet();//初始化為集合實(shí)現(xiàn)類,這樣做可以提高程序的健壯性,同時(shí)避免了應(yīng)用程序訪問取詞為null的orders集合的方法而拋出NullPointerException。  
  11.     public Customer() {  
  12.     }  
  13.  
  14.     public Customer(String name, Set orders) {  
  15.        this.name = name;  
  16.        this.orders = orders;  
  17.     }  
  18.    //省略了id,name的get和set訪問方法  
  19.     public Set getOrders() {  
  20.         return this.orders;  
  21.     }  
  22.       
  23.     public void setOrders(Set orders) {  
  24.         this.orders = orders;  
  25.     }  

接下來就是映射文件的配置Customer.hbm.xml:

  1. <class name="mypack.Customer" table="CUSTOMERS" >  
  2.   <id name="id" type="long" column="ID">  
  3.     <generator class="increment"/>  
  4.   </id>  
  5.  
  6.   <property name="name" type="string" >  
  7.       <column name="NAME" length="15" />  
  8.   </property>  
  9.   <set   
  10.       name="orders" 
  11.       cascade="save-update"   
  12.         
  13.         
  14.       <key column="CUSTOMER_ID" />//表示ORDERS表通過外鍵CUSTOMER_ID參照CUSTOMERS表  
  15.       <one-to-many class="mypack.Order" />  
  16.    </set>     
  17.  
  18. </class

使用方法のBussiness.java演示分函數(shù)介紹:

(1)saveCustomerAndOrderWithCascade()方法:當(dāng)映射文件中<set>的屬性為“save-update”時(shí),Hibernate在持久化Customer對象時(shí)也會(huì)自動(dòng)持久化其所關(guān)聯(lián)的Order對象

  1.   public void saveCustomerAndOrderWithCascade(){  
  2.     Session session = sessionFactory.openSession();  
  3.     Transaction tx = null;  
  4.     try {  
  5.       tx = session.beginTransaction();  
  6. /*創(chuàng)建一個(gè)customer對象和order對象*/ 
  7.       Customer customer=new Customer("Tom",new HashSet());  
  8.       Order order=new Order();  
  9.       order.setOrderNumber("Tom_Order001");  
  10. /*建立Customer與Order的一對多雙向關(guān)聯(lián)關(guān)系*/ 
  11.       order.setCustomer(customer);  
  12.       customer.getOrders().add(order);  
  13. /*保存Customer對象*/ 
  14.       session.save(customer);  
  15. /* 當(dāng)映射文件中<set>的屬性為“save-update”時(shí),Hibernate在持久化Customer對象時(shí)也會(huì)自動(dòng)持久化其所關(guān)聯(lián)的Order對象  
  16.  insert into CUSTOMERS(ID,NAME) values(1,"Tom");  
  17.  insert into ORDERS(ID,ORDER_NUMBER,CUSTOMER_ID) values(1,"Tom_Order001",1)*/ 
  18.       tx.commit();  
  19.       idOfTom=customer.getId();  
  20.       idOfTomOrder=order.getId();    
  21.                     
  22.     }catch (RuntimeException e) {  
  23.       if (tx != null) {  
  24.         tx.rollback();  
  25.       }  
  26.       e.printStackTrace();  
  27.     } finally {  
  28.       session.close();  
  29.     }  
  30.   } 

當(dāng)映射文件中<set>的屬性為“save-update”時(shí),Hibernate在持久化Customer對象時(shí)也會(huì)自動(dòng)持久化其所關(guān)聯(lián)的Order對象

  1. insert into CUSTOMERS(ID,NAME) values(1,"Tom");  
  2. insert into ORDERS(ID,ORDER_NUMBER,CUSTOMER_ID) values(1,"Tom_Order001",1

(2)printOrdersOfCustomer(Long customerId)方法:打印與指定customerId關(guān)聯(lián)的所有Order對象

  1. public void printOrdersOfCustomer(Long customerId){  
  2.   Session session = sessionFactory.openSession();  
  3.   Transaction tx = null;  
  4.   try {  
  5.     tx = session.beginTransaction();  
  6.     Customer customer=(Customer)session.get(Customer.class,customerId);  
  7.     printOrders(customer.getOrders());//使用getOrders獲取一個(gè)order對象set  
  8.     tx.commit();  
  9.   }catch (RuntimeException e) {  
  10.     if (tx != null) {  
  11.        tx.rollback();  
  12.     }  
  13.     throw e;  
  14.   } finally {  
  15.      session.close();  
  16.   }  

其調(diào)用的函數(shù)printOrders(Set orders)

  1. public void printOrders(Set orders){  
  2.      for (Iterator it = orders.iterator(); it.hasNext();) {  
  3.         Order order=(Order)it.next();  
  4.         System.out.println("OrderNumber of "+order.getCustomer().getName()+ " :"+order.getOrderNumber());  
  5.      }  
  6.  } 

(3)saveCustomerAndOrderWithInverse()方法:演示映射文件<set>屬性為inverse

  1. public void saveCustomerAndOrderWithInverse(){  
  2.       saveCustomerAndOrderSeparately();  
  3.       associateCustomerAndOrder();  
  4.    } 

調(diào)用的函數(shù)saveCustomerAndOrderSeparately():即是分別存儲(chǔ),與saveCustomerAndOrderWithCascade()方法恰好相反。

  1. Customer customer=new Customer();  
  2. customer.setName("Jack");  
  3. Order order=new Order();  
  4. order.setOrderNumber("Jack_Order001");  
  5. session.save(customer);  
  6. session.save(order);&nbsp;  
  7. tx.commit();  
  8. idOfJack=customer.getId();  
  9. idOfJackOrder=order.getId(); 

為了使上述代碼正常執(zhí)行,需要確保Order.hbm.xml文件的<many-to-one>元素的not null取默認(rèn)值false,否則會(huì)出現(xiàn)異常;Hibernate會(huì)執(zhí)行如下

  1. insert into CUSTOMERS(ID,NAME) values(2,"Jack");  
  2. insert into ORDERS(ID,ORDER_NUMBER,CUSTOMER_ID) values(2,"Jack_Order001",null); 

調(diào)用的函數(shù)associateCustomerAndOrder():該方法加載由saveCustomerAndOrderSeparately()方法持久化Customer和Order對象,然后建立兩者之間的一對多的關(guān)系

  1. public void associateCustomerAndOrder(){  
  2.    Session session = sessionFactory.openSession();  
  3.    Transaction tx = null;  
  4.    try {  
  5.      tx = session.beginTransaction();  
  6.      /*加載持久化對象Customer、Order*/ 
  7.      Customer customer=(Customer)session.load(Customer.class,idOfJack);  
  8.      Order order=(Order)session.load(Order.class,idOfJackOrder);  
  9.      /*建立Customer和Order的關(guān)聯(lián)關(guān)系*/ 
  10.      order.setCustomer(customer);  
  11.      customer.getOrders().add(order);  
  12.      tx.commit();  
  13.    }catch (RuntimeException e) {  
  14.      if (tx != null) {  
  15.        tx.rollback();  
  16.      }  
  17.       e.printStackTrace();  
  18.    } finally {  
  19.      session.close();  
  20.    }  
  21.  } 

這樣重復(fù)執(zhí)行多余的SQL語句會(huì)影響java應(yīng)用的性能,解決的方法是將<set>的inverse屬性設(shè)為true。因此修改Customer.hbm.xml文件:

  1. <set   
  2.         name="orders" 
  3.         inverse="true" 
  4.         cascade="save-update"   
  5.         >  
  6.           
  7.         <key column="CUSTOMER_ID" />//表示ORDERS表通過外鍵CUSTOMER_ID參照CUSTOMERS表  
  8.         <one-to-many class="mypack.Order" />  
  9. </set>  

(4)級聯(lián)刪除:

  1. tx = session.beginTransaction();  
  2.       Customer customer=(Customer)session.load(Customer.class,customerId);  
  3.       session.delete(customer);  
  4.       tx.commit(); 

如果要?jiǎng)h除Customer所關(guān)聯(lián)的Order對象的話,需要將cascade屬性設(shè)置為delete,如下:

  1. <set   
  2.        name="orders" 
  3.        inverse="true" 
  4.        cascade="delete"   
  5.        >  
  6. <key column="CUSTOMER_ID" />  
  7.        <one-to-many class="mypack.Order" />  
  8.     </set> 

執(zhí)行后,Hibernate會(huì)做以下動(dòng)作:

  1. delete from ORDERS where CUSTOMER_ID=2;  
  2. delete from CUSTOMERS where ID=2

如果關(guān)聯(lián)雙方是父子關(guān)系,就可以把復(fù)方的cascade設(shè)置為all-delete-orphan;這樣刪除父方對象時(shí)就會(huì)級聯(lián)刪除所有關(guān)聯(lián)的子方對象。

#p#

三、映射一對多雙向自身關(guān)聯(lián)關(guān) 

Category.java:

  1. package mypack;  
  2. import java.util.HashSet;  
  3. import java.util.Set;  
  4. public class Category  implements java.io.Serializable {  
  5.      private long id;  
  6.      private String name;  
  7.      private Set childCategories = new HashSet(0);  
  8.      private Category parentCategory;  
  9.  
  10.     public Category() {  
  11.     }  
  12.  
  13.     public Category(String name, Set childCategories, Category parentCategory) {  
  14.        this.name = name;  
  15.        this.childCategories = childCategories;  
  16.        this.parentCategory = parentCategory;  
  17.     }  
  18.      
  19.     public long getId() {  
  20.         return this.id;  
  21.     }  
  22.       
  23.     public void setId(long id) {  
  24.         this.id = id;  
  25.     }  
  26.     public String getName() {  
  27.         return this.name;  
  28.     }  
  29.       
  30.     public void setName(String name) {  
  31.         this.name = name;  
  32.     }  
  33.     public Set getChildCategories() {  
  34.         return this.childCategories;  
  35.     }  
  36.       
  37.     public void setChildCategories(Set childCategories) {  
  38.         this.childCategories = childCategories;  
  39.     }  
  40.     public Category getParentCategory() {  
  41.         return this.parentCategory;  
  42.     }  
  43.       
  44.     public void setParentCategory(Category parentCategory) {  
  45.         this.parentCategory = parentCategory;  
  46.     }  

配置文件Category.hbm.xml:

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping  
  3. PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping >  
  6.  
  7.   <class name="mypack.Category" table="CATEGORIES" >  
  8.     <id name="id" type="long" column="ID">  
  9.       <generator class="increment"/>  
  10.     </id>  
  11.  
  12.     <property name="name" type="string" >  
  13.         <column name="NAME" length="15" />  
  14.     </property>  
  15.  
  16.     <set   
  17.         name="childCategories" 
  18.         cascade="save-update" 
  19.         inverse="true" 
  20.         >  
  21.         <key column="CATEGORY_ID" />  
  22.         <one-to-many class="mypack.Category" />  
  23.      </set>     
  24.  
  25.    <many-to-one  
  26.         name="parentCategory" 
  27.         column="CATEGORY_ID" 
  28.         class="mypack.Category" 
  29.        />  
  30.  
  31.   </class>  
  32.  
  33. </hibernate-mapping> 

原文鏈接:http://blog.csdn.net/yu422560654/article/details/7176407

【編輯推薦】

  1. 精通Hibernate:對象關(guān)系映射基礎(chǔ)
  2. 精通Hibernate:第一個(gè)Hibernate應(yīng)用
  3. Hibernate緩存何時(shí)使用和如何使用
  4. Hibernate連接Mysql中文亂碼處理
  5. Hibernate配置要點(diǎn)詳談
責(zé)任編輯:林師授 來源: yu422560654的博客
相關(guān)推薦

2009-06-04 10:34:19

Hibernate一對一對多關(guān)系配置

2009-06-18 14:22:06

Hibernate多對Hibernate

2012-03-21 11:43:41

JavaHibernate

2009-09-25 12:59:52

Hibernate映射

2012-02-08 12:17:38

HibernateJava

2009-06-03 16:27:27

Hibernate一對一關(guān)系

2009-06-03 16:18:16

Hibernate關(guān)系代碼實(shí)例

2009-06-04 16:14:22

Hibernate一對Hibernate一對Hibernate多對

2009-09-23 10:37:50

Hibernate一對

2009-09-23 10:57:02

Hibernate一對

2009-09-22 09:55:58

Hibernate實(shí)例

2023-06-12 08:09:01

FlaskSQLAlchemy

2012-02-03 10:54:50

HibernateJava

2009-07-21 17:31:39

iBATIS一對多映射

2009-09-23 13:26:10

Hibernate對象

2012-02-08 14:01:18

HibernateJava

2009-06-02 14:46:26

Hibernate關(guān)系映射教程

2009-09-25 15:34:42

Hibernate關(guān)聯(lián)

2010-04-15 09:09:02

Hibernate

2009-08-17 10:34:51

NHibernate一
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

日韩欧美亚洲另类制服综合在线| 国产精品久久久爽爽爽麻豆色哟哟| 欧美国产第一页| 欧亚乱熟女一区二区在线| 中文字幕资源网在线观看免费| 久久久国产一区二区三区四区小说| 国产欧美精品一区二区三区介绍| 亚洲 欧美 变态 另类 综合| 国产精品chinese在线观看| 欧美视频中文字幕在线| 亚洲一区三区视频在线观看| 国产综合视频在线| 喷水一区二区三区| 久久久久久中文字幕| 人人妻人人澡人人爽| 成人午夜网址| 欧美精品日韩一本| av动漫在线看| 污视频网站免费在线观看| 26uuu亚洲综合色| 91精品久久久久久蜜桃| 亚洲欧美偷拍视频| 激情综合电影网| 一区二区三区美女xx视频| 亚洲天堂小视频| 国产在线|日韩| 亚洲成人在线观看视频| 一区二区三区在线观看www| 天天综合网天天综合| 国产真实乱偷精品视频免| 欧美又大又粗又长| 久久免费视频播放| 国产精品久久久久久影院8一贰佰| 亚洲精品久久久一区二区三区 | 欧美日韩极品在线观看一区| 日日摸日日碰夜夜爽无码| av大片在线| 国产精品久久久久永久免费观看| 欧美日韩一区二区视频在线| 免费av一级片| 国产成人免费高清| 国产精品揄拍500视频| 亚洲 欧美 日韩 在线| 中文日韩在线| 91高清视频在线免费观看| 国产一级特黄视频| 亚洲天堂久久| 欧美激情乱人伦| 久久精品视频日本| 欧美涩涩视频| 久久久久久999| 黄色小视频在线免费看| 红桃视频欧美| 国外成人在线直播| 日韩三级视频在线| 国产免费成人| 国产999在线观看| 婷婷激情五月综合| 蜜臀av性久久久久av蜜臀妖精| 国产精品夫妻激情| 夜夜狠狠擅视频| 激情小说亚洲一区| 亚洲自拍偷拍区| www.久久伊人| 成人av免费网站| 久久一区二区三区av| 韩国精品视频| 中文字幕日韩一区| 国产尤物av一区二区三区| 黄色成人在线网| 欧美日韩国产精品一区二区不卡中文| 欧美极品欧美精品欧美| 吉吉日韩欧美| 97视频精品| 国产精品一卡二| 5g国产欧美日韩视频| www.久久综合| 久久综合99re88久久爱| 视频一区二区三区在线观看| 日本三级视频在线播放| 伊人一区二区三区| 国产精品无码一区二区在线| 国产精品迅雷| 欧美日韩在线播放三区| 免费av不卡在线| 91精品尤物| 国产视频精品久久久| 色一情一交一乱一区二区三区 | 国产成人精品一区二区三区网站观看| 成人区精品一区二区| 瑟瑟在线观看| 一区二区中文视频| 欧洲精品一区二区三区久久| 日韩一区二区三区免费| 欧美一级生活片| 国产传媒第一页| 亚洲啊v在线观看| 97视频在线观看播放| 在线播放成人av| 成人18精品视频| 亚洲成人午夜在线| wwwwxxxx在线观看| 欧美日韩免费高清一区色橹橹 | 国产精品久久久国产盗摄| 成年人网站91| 国产精品12p| 欧美大片1688| 精品国产一区a| 国产精品18在线| 国产农村妇女精品一区二区| 亚洲xxxxx| 搞黄视频免费在线观看| 亚洲成av人影院在线观看网| 成人日韩在线视频| 秋霞影院一区二区三区| 欧美成人免费在线观看| 波多野结衣在线电影| 波多野结衣在线aⅴ中文字幕不卡| 亚洲欧美日韩精品综合在线观看| 国产高清视频色在线www| 欧美一区二区三区四区久久| 亚洲一级片在线播放| 国产欧美一区二区色老头| 91久久国产综合久久蜜月精品| 国产在线高清| 欧美午夜精品伦理| xfplay5566色资源网站| 91成人观看| 国产精品一区二区三区久久| 日韩在线免费播放| 五月婷婷综合网| 伊人久久久久久久久| 91精品一区国产高清在线gif | 国产日韩亚洲欧美综合| 国产一区二区视频播放| 99re8这里有精品热视频免费 | 狠狠色丁香久久婷婷综合_中| 欧美一区二区三区精美影视| 日本不良网站在线观看| 亚洲第一精品福利| 国产精品白浆一区二小说| 国产盗摄一区二区三区| 粉嫩av一区二区三区天美传媒| 青草综合视频| 深夜福利一区二区| 久久久久久久亚洲| 久久久国产精品不卡| aⅴ在线免费观看| 九九精品在线| 国产精品www色诱视频| 视频一区二区三区国产| 日韩欧美国产一区二区| 亚洲精品视频久久久| 香蕉久久夜色精品| 日本欧美精品久久久| 欧美free嫩15| 日韩视频在线观看免费| 国产永久免费视频| 亚洲女性喷水在线观看一区| 日本精品一区在线| 欧美日韩国产高清| av一区二区三区四区电影| 国产高清在线a视频大全| 亚洲成人a级网| 一级做a爰片久久毛片| 中文字幕欧美日韩一区| 欧美激情第一区| 亚洲小说区图片区| 欧美日韩国产综合在线| 日本国产欧美| 久久国产精品影片| 色婷婷av一区二区三区之红樱桃| 欧美日韩午夜视频在线观看| 欧洲av一区二区三区| 精品一区二区成人精品| 男人天堂新网址| 妖精视频一区二区三区免费观看| 国产精品久久久久久五月尺| 国产黄色在线免费观看| 日韩视频一区二区在线观看| 国产三级av片| 国产精品色婷婷| 无码人妻精品一区二区三区99不卡| 一区二区黄色| 天天做天天爱天天高潮| 久久男人av| 国产欧美va欧美va香蕉在| h片在线播放| 日韩av有码在线| 91福利免费视频| 大桥未久av一区二区三区| 黄色免费一级视频| www.亚洲色图| 色免费在线视频| 99成人在线| 亚洲综合激情五月| 亚洲国产国产| 3d动漫啪啪精品一区二区免费 | 51精品久久久久久久蜜臀| 久草视频精品在线| 国产精品久久久久久亚洲伦| 亚洲一级Av无码毛片久久精品| 青青草精品视频| 很污的网站在线观看| 久久一本综合| 美女一区视频| 99热这里只有精品首页 | 最新日韩在线视频| 日韩精品卡通动漫网站| 国产乱子伦视频一区二区三区| 能看的毛片网站| 激情亚洲成人| 肉大捧一出免费观看网站在线播放| 蜜桃精品噜噜噜成人av| 国产乱码精品一区二区三区中文| 国产亚洲精品精品国产亚洲综合| 韩国精品久久久999| 91香蕉在线观看| 色阁综合伊人av| 国产一级在线| 亚洲精品一区久久久久久| 亚洲精品久久久久久久久久 | 亚洲成人动漫一区| 日韩在线中文字幕视频| 国产精品久久久久天堂| 美女爆乳18禁www久久久久久| av在线播放成人| 蜜桃视频无码区在线观看| 国产综合一区二区| 欧美女同在线观看| 日本一区中文字幕| 北条麻妃av高潮尖叫在线观看| 亚洲免费观看| 国产一级不卡视频| 欧美日本一区二区高清播放视频| 亚洲最新在线| 久久综合国产| 一本一道久久a久久综合精品| 欧美三级三级| 日韩精品一区二区三区外面| 精品产国自在拍| 色狠狠久久av五月综合| 欧美色女视频| 在线免费一区| 在线看片不卡| 少妇一晚三次一区二区三区| 亚洲影视一区| www.国产二区| 亚洲日产国产精品| 免费看的黄色大片| 美女精品在线| 亚洲人辣妹窥探嘘嘘| 美女在线视频一区| 制服丝袜中文字幕第一页 | 黄色片网站在线| 欧美xxxx做受欧美.88| 羞羞视频在线免费国产| 欧美精品videossex88| 交100部在线观看| 欧美性在线观看| 99久久综合国产精品二区| 国产精品亚洲片夜色在线| 精品国产不卡一区二区| 成人国产一区二区| 日韩理论电影中文字幕| 日韩色妇久久av| 日韩成人三级| 欧美人与动牲交xxxxbbbb| 中日韩男男gay无套| 国产a视频免费观看| 久久精品久久久精品美女| 中文字幕第三区| 成人高清视频在线| 天堂久久精品忘忧草| 亚洲四区在线观看| 日本网站在线免费观看| 色婷婷综合五月| 国产sm主人调教女m视频| 日韩电影免费观看在线观看| 国产高清视频在线| 欧美日本国产在线| 在线成人av观看| 成人网欧美在线视频| 精品三级av在线导航| 亚洲国产精品一区二区第一页| 亚洲最新色图| 日韩久久一级片| 国产在线一区观看| 亚洲日本精品视频| 亚洲综合丁香婷婷六月香| 日韩欧美国产另类| 欧美成人精品1314www| 国产乱视频在线观看| 欧美黑人一级爽快片淫片高清| 日本高清不卡一区二区三区视频| 91嫩草在线| 精品国产一区二区三区久久久樱花 | 中文字幕无码毛片免费看| 久久综合久久99| 欧美成人三级在线观看| 欧洲一区在线观看| 欧美一级淫片免费视频魅影视频| 中文字幕亚洲一区| 日韩伦理在线一区| 成人xxxxx色| 久久免费大视频| 黄色片视频在线免费观看| 国产美女一区二区三区| 国产三级av在线播放| 午夜精品一区二区三区免费视频| 国产精品欧美亚洲| 一区二区三区www| 色是在线视频| 国产不卡一区二区三区在线观看| 99久久.com| 青青在线视频免费| 91网站最新网址| 久久国产精品波多野结衣| 欧美日本高清视频在线观看| 九色在线免费| 欧美最顶级丰满的aⅴ艳星| 超碰97成人| 国产午夜精品视频一区二区三区| 久久精品国产网站| 美国黄色特级片| 91久久精品一区二区三| 三级无遮挡在线观看| 久久久久久高潮国产精品视| 欧美国产中文高清| 国产成人三级视频| 国产一区二区在线观看免费| 欧美自拍偷拍网| 欧美综合色免费| 浮生影视网在线观看免费| 欧美做爰性生交视频| 午夜a一级毛片亚洲欧洲| 日韩视频在线视频| 成人国产在线观看| 国产精品变态另类虐交| 精品对白一区国产伦| 久久久123| 风间由美一区二区三区| 在线不卡亚洲| 国产性生活毛片| 欧美日韩国产综合新一区 | 亚洲天堂av资源在线观看| 青少年xxxxx性开放hg| 国内国产精品久久| 国产一区二区视频在线观看免费| 91精品国产综合久久香蕉麻豆| 老司机在线看片网av| 91色中文字幕| 国产在线成人| 三叶草欧洲码在线| 色婷婷av一区二区三区大白胸| 国产69久久| 91久久久久久久久久久久久| 欧美 日韩 国产 一区| 国产麻豆剧传媒精品国产| 亚洲成人综合视频| 精品成人一区二区三区免费视频| 国产成人精品日本亚洲| jiujiure精品视频播放| 玖玖爱视频在线| 一区二区三区四区在线| 四季av日韩精品一区| 欧亚精品中文字幕| 日韩综合一区| 欧美老女人bb| 色婷婷精品久久二区二区蜜臂av| 国产在线你懂得| 91超碰rencao97精品| 亚洲黄色在线| 91资源在线播放| 91精品免费观看| 交100部在线观看| 亚洲精品永久www嫩草| 国产精品77777竹菊影视小说| 亚洲综合一二三| 主播福利视频一区| 91综合精品国产丝袜长腿久久| 欧美私人情侣网站| 亚洲欧美日韩国产手机在线 | 天堂精品久久久久| 久久国产成人精品国产成人亚洲| 国产精品久久午夜夜伦鲁鲁| 黄色小视频免费观看| 国产99久久精品一区二区永久免费 | 国产欧美日韩亚州综合| 国产黄色片网站| 国产精品国产三级国产aⅴ浪潮| 欧美日韩国产综合网| 中文字幕第4页| 精品国产乱码久久久久久1区2区| 国产精品高清乱码在线观看 | 女性裸体视频网站| 亚洲第一区在线| 国产精品久久久久久久久久辛辛| 国产男女在线观看| 一区二区欧美视频|