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

Hibernate復合主鍵映射

開發 后端
在日常開發中會遇到這樣一種情況,數據庫中的某張表需要多個字段列才能唯一確定一行記錄,這時表需要使用復合主鍵。面對這樣的情況Hibernate為我們提供了兩種方式來解決復合主鍵問題。

目 錄:

1. 實現方式一:將復合主鍵對應的屬性與實體其他普通屬性放在一起

2. 實現方式二:將主鍵屬性提取到一個主鍵類中,實體類只需包含主鍵類的一個引用

在日常開發中會遇到這樣一種情況,數據庫中的某張表需要多個字段列才能唯一確定一行記錄,這時表需要使用復合主鍵。面對這樣的情況Hibernate為我們提供了兩種方式來解決復合主鍵問題。

方式一:將復合主鍵對應的屬性與實體其他普通屬性放在一起

例如實體類People中"id"和"name"屬性對應復合主鍵:

  1. /*實體類,使用復合主鍵必須實現Serializable接口*/ 
  2. public class People implements Serializable  
  3. {  
  4.     private static final long serialVersionUID = -4888836126783955019L;  
  5.       
  6.     private String id;  
  7.     private String name;  
  8.     private int age;  
  9.       
  10.     public People()  
  11.     {  
  12.           
  13.     }  
  14.  
  15.     public String getId()  
  16.     {  
  17.         return id;  
  18.     }  
  19.  
  20.     public void setId(String id)  
  21.     {  
  22.         this.id = id;  
  23.     }  
  24.  
  25.     public String getName()  
  26.     {  
  27.         return name;  
  28.     }  
  29.  
  30.     public void setName(String name)  
  31.     {  
  32.         this.name = name;  
  33.     }  
  34.  
  35.     public int getAge()  
  36.     {  
  37.         return age;  
  38.     }  
  39.  
  40.     public void setAge(int age)  
  41.     {  
  42.         this.age = age;  
  43.     }  
  44.  
  45.     @Override 
  46.     public int hashCode()  
  47.     {  
  48.         final int prime = 31;  
  49.         int result = 1;  
  50.         result = prime * result + ((id == null) ? 0 : id.hashCode());  
  51.         result = prime * result + ((name == null) ? 0 : name.hashCode());  
  52.         return result;  
  53.     }  
  54.  
  55.     @Override 
  56.     public boolean equals(Object obj)  
  57.     {  
  58.         if (this == obj)  
  59.             return true;  
  60.         if (obj == null)  
  61.             return false;  
  62.         if (getClass() != obj.getClass())  
  63.             return false;  
  64.         People other = (People) obj;  
  65.         if (id == null)  
  66.         {  
  67.             if (other.id != null)  
  68.                 return false;  
  69.         }  
  70.         else if (!id.equals(other.id))  
  71.             return false;  
  72.         if (name == null)  
  73.         {  
  74.             if (other.name != null)  
  75.                 return false;  
  76.         }  
  77.         else if (!name.equals(other.name))  
  78.             return false;  
  79.         return true;  
  80.     }  

People.hbm.xml:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3.  
  4. <hibernate-mapping> 
  5.     <class name="com.suxiaolei.hibernate.pojos.People" table="people"> 
  6.         <!-- 復合主鍵使用composite-id標簽 --> 
  7.         <composite-id> 
  8.             <!-- key-property標簽表示哪一些屬性對應復合主鍵 --> 
  9.             <key-property name="id" column="id" type="string"></key-property> 
  10.             <key-property name="name" column="name" type="string"></key-property> 
  11.         </composite-id> 
  12.  
  13.         <property name="age" column="age" type="integer"></property> 
  14.     </class> 
  15. </hibernate-mapping> 

Hibernate中使用復合主鍵時需要注意一些規則:

1. 使用復合主鍵的實體類必須實現Serializable接口。必須實現Serializable接口的原因很簡單,我們查找數據的時候是根據主鍵查找的。打開Hibernate的幫助文檔我們可以找到get與load方法的聲明形式如下:

Object load(Class theClass,Serializable id)

Object get(Class theClass,Serializable id)

當我們查找復合主鍵類的對象時,需要傳遞主鍵值給get()或load()方法的id參數,而id參數只能接收一個實現了Serializable接口的對象。而復合主鍵類的主鍵不是一個屬性可以表示的,所以只能先new出復合主鍵類的實例(例如:new People()),然后使用主鍵屬性的set方法將主鍵值賦值給主鍵屬性,然后將整個對象傳遞給get()或load()方法的id參數,實現主鍵值的傳遞,所以復合主鍵的實體類必須實現Serializable接口。

2. 使用復合主鍵的實體類必須重寫equals和hashCode方法。必須重寫equals和hashCode方法也很好理解。這兩個方法使用于判斷兩個對象 (兩條記錄)是否相等的。為什么要判斷兩個對象是否相等呢?因為數據庫中的任意兩條記錄中的主鍵值是不能相同的,所以我們在程序中只要確保了兩個對象的主鍵值不同就可以防止主鍵約束違例的錯誤出現。也許這里你會奇怪為什么不使用復合主鍵的實體類不重寫這兩個方法也沒有主鍵違例的情況出現,這是因為使用單一主鍵方式,主鍵值是Hibernate來維護的,它會確保主鍵不會重復,而復合主鍵方式,主鍵值是編程人員自己維護的,所以必須重寫equals和hashCode方法用于判斷兩個對象的主鍵是否相同。

3. 重寫的equals和hashCode方法,只與主鍵屬性有關,普通屬性不要影響這兩個方法進行判斷。這個原因很簡單,主鍵才能決定一條記錄,其他屬性不能決定一條記錄。

保存測試:

  1. public class Client  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         Session session = HibernateUtil.getSessionFactory().openSession();  
  6.         Transaction tx = null;  
  7.           
  8.         try 
  9.         {  
  10.             tx = session.beginTransaction();  
  11.               
  12.             People people = new People();  
  13.             /*主鍵值由我們自己維護*/ 
  14.             people.setId("123456");  
  15.             people.setName("zhangsan");  
  16.             people.setAge(40);  
  17.               
  18.             session.save(people);  
  19.               
  20.             tx.commit();  
  21.         }  
  22.         catch (Exception e)  
  23.         {  
  24.             if(tx != null)  
  25.             {  
  26.                 tx.rollback();  
  27.             }  
  28.               
  29.             e.printStackTrace();  
  30.         }  
  31.         finally 
  32.         {  
  33.             session.close();  
  34.         }  
  35.     }  

看看數據庫:

數據被正確的插入到數據庫中了。

讀取數據測試:

  1. public class Client  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         Session session = HibernateUtil.getSessionFactory().openSession();  
  6.         Transaction tx = null;  
  7.           
  8.         try 
  9.         {  
  10.             tx = session.beginTransaction();  
  11.               
  12.             /*查詢復合主鍵對象,需要先構建主鍵*/ 
  13.             People peoplePrimaryKey = new People();  
  14.             peoplePrimaryKey.setId("123456");  
  15.             peoplePrimaryKey.setName("zhangsan");  
  16.               
  17.             /*然后將構建的主鍵值傳入get方法中獲取對應的People對象*/ 
  18.             People people = (People)session.get(People.class, peoplePrimaryKey);  
  19.               
  20.             System.out.println("people age is:"+people.getAge());  
  21.               
  22.             tx.commit();  
  23.         }  
  24.         catch (Exception e)  
  25.         {  
  26.             if(tx != null)  
  27.             {  
  28.                 tx.rollback();  
  29.             }  
  30.               
  31.             e.printStackTrace();  
  32.         }  
  33.         finally 
  34.         {  
  35.             session.close();  
  36.         }  
  37.     }  

控制臺輸出:

people age is:40

可以看到數據成功的取出了。

 

方式二:將主鍵屬性提取到一個主鍵類中,實體類只需包含主鍵類的一個引用。

主鍵類:

  1. /*必須實現Serializable接口*/ 
  2. public class PeoplePrimaryKey implements Serializable  
  3. {  
  4.     private static final long serialVersionUID = -1190986010439330142L;  
  5.       
  6.     /*復合主鍵值*/ 
  7.     private String id;  
  8.     private String name;  
  9.       
  10.     public PeoplePrimaryKey()  
  11.     {  
  12.           
  13.     }  
  14.       
  15.     /*復合主鍵值的get和set方法*/ 
  16.     public String getId()  
  17.     {  
  18.         return id;  
  19.     }  
  20.  
  21.     public void setId(String id)  
  22.     {  
  23.         this.id = id;  
  24.     }  
  25.  
  26.     public String getName()  
  27.     {  
  28.         return name;  
  29.     }  
  30.  
  31.     public void setName(String name)  
  32.     {  
  33.         this.name = name;  
  34.     }  
  35.  
  36.     @Override 
  37.     public int hashCode()  
  38.     {  
  39.         final int prime = 31;  
  40.         int result = 1;  
  41.         result = prime * result + ((id == null) ? 0 : id.hashCode());  
  42.         result = prime * result + ((name == null) ? 0 : name.hashCode());  
  43.         return result;  
  44.     }  
  45.  
  46.     @Override 
  47.     public boolean equals(Object obj)  
  48.     {  
  49.         if (this == obj)  
  50.             return true;  
  51.         if (obj == null)  
  52.             return false;  
  53.         if (getClass() != obj.getClass())  
  54.             return false;  
  55.         PeoplePrimaryKey other = (PeoplePrimaryKey) obj;  
  56.         if (id == null)  
  57.         {  
  58.             if (other.id != null)  
  59.                 return false;  
  60.         }  
  61.         else if (!id.equals(other.id))  
  62.             return false;  
  63.         if (name == null)  
  64.         {  
  65.             if (other.name != null)  
  66.                 return false;  
  67.         }  
  68.         else if (!name.equals(other.name))  
  69.             return false;  
  70.         return true;  
  71.     }  

實體類:

  1. public class People  
  2. {  
  3.     /*持有主鍵類的一個引用,使用該引用作為這個類的OID*/ 
  4.     private PeoplePrimaryKey peoplePrimaryKey;  
  5.     private int age;  
  6.       
  7.     public People()  
  8.     {  
  9.           
  10.     }  
  11.       
  12.     public PeoplePrimaryKey getPeoplePrimaryKey()  
  13.     {  
  14.         return peoplePrimaryKey;  
  15.     }  
  16.  
  17.     public void setPeoplePrimaryKey(PeoplePrimaryKey peoplePrimaryKey)  
  18.     {  
  19.         this.peoplePrimaryKey = peoplePrimaryKey;  
  20.     }  
  21.  
  22.     public int getAge()  
  23.     {  
  24.         return age;  
  25.     }  
  26.  
  27.     public void setAge(int age)  
  28.     {  
  29.         this.age = age;  
  30.     }  

People.hbm.xml文件稍有一點變動:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3.  
  4. <hibernate-mapping> 
  5.     <class name="com.suxiaolei.hibernate.pojos.People" table="people"> 
  6.         <!-- 復合主鍵使用composite-id標簽 --> 
  7.         <!--  
  8.         name - 指定了復合主鍵對應哪一個屬性  
  9.         class - 指定了復合主鍵屬性的類型  
  10.         --> 
  11.         <composite-id name="peoplePrimaryKey" class="com.suxiaolei.hibernate.pojos.PeoplePrimaryKey"> 
  12.             <!-- key-property指定了復合主鍵由哪些屬性組成 --> 
  13.             <key-property name="id" column="id" type="string"></key-property> 
  14.             <key-property name="name" column="name" type="string"></key-property> 
  15.         </composite-id> 
  16.  
  17.         <property name="age" column="age" type="integer"></property> 
  18.     </class> 
  19. </hibernate-mapping> 

場景測試與方式一大同小異這里不再舉例了。主鍵類為什么實現Serializable接口和為什么重寫equals和hashCode方法上面已經解釋的很清楚了。

原文鏈接:http://www.cnblogs.com/otomedaybreak/archive/2012/01/25/2329390.html

【編輯推薦】

  1. Hibernate繼承映射
  2. Hibernate事務與并發問題處理
  3. 讓Hibernate顯示SQL語句的綁定參數值
  4. hibernate中MySQL自增字段的映射描述
  5. Hibernate+MySQL 中文問題的解決
責任編輯:林師授 來源: 音①曉的博客
相關推薦

2009-06-01 12:11:31

hibernatejpa復合主鍵

2012-03-21 11:43:41

JavaHibernate

2009-09-23 09:16:25

Hibernate復合

2012-02-02 16:13:29

HibernateJava

2009-09-23 14:23:51

Hibernate主鍵

2009-09-24 10:50:31

Hibernate主鍵

2009-09-25 10:00:47

Hibernate映射

2012-02-03 11:17:33

HibernateJava

2009-09-22 15:10:22

Hibernate映射

2009-09-23 17:34:18

Hibernate映射

2009-06-29 08:56:49

Hibernate主鍵生成主鍵

2009-09-25 13:33:43

Hibernate主鍵

2009-09-22 09:31:15

Hibernate主鍵

2009-09-24 13:49:31

Hibernate自增

2009-06-18 14:22:06

Hibernate多對Hibernate

2009-06-02 14:46:26

Hibernate關系映射教程

2011-07-25 18:11:47

SQL Server數復合主鍵

2009-09-29 15:58:22

Hibernate映射

2009-09-25 12:59:52

Hibernate映射

2009-09-28 14:54:33

Hibernate映射
點贊
收藏

51CTO技術棧公眾號

亚洲一级在线| 精品中文字幕在线2019| 亚洲永久在线观看| 久久精品免费在线| 国产精品亚洲二区| 欧美一区二区高清| 欧美,日韩,国产在线| 91网在线播放| 国产91精品久久久久久久网曝门| 人妖精品videosex性欧美| 亚洲综合久久av一区二区三区| 超碰cao国产精品一区二区| 日本韩国一区二区三区视频| 男女激烈动态图| 视频一区二区三区国产| 国产综合色产在线精品| 欧美在线亚洲在线| 九九精品在线观看视频| 欧美中文一区二区| 亚洲大胆人体av| 99国产精品久久久久久| 手机在线理论片| 亚洲欧美一区二区三区国产精品| 国产精品久久久久久免费观看| 中文字幕乱码中文字幕| 夜久久久久久| 欧美激情高清视频| 色哟哟一一国产精品| 国产剧情在线观看一区| 亚洲国产97在线精品一区| 午夜一级免费视频| 日韩欧美精品电影| 黄色一区二区在线观看| 成年人视频大全| 老司机在线永久免费观看| 久久久久久免费| 欧美高清性xxxxhd| 天天舔天天干天天操| 国产成人精品亚洲777人妖 | 玖玖在线播放| 亚洲狼人国产精品| 国产高清免费在线| 18视频免费网址在线观看| 久久久夜色精品亚洲| 国产精品夜夜夜一区二区三区尤| 99久久国产热无码精品免费| 久久精品国产99| 国产精品稀缺呦系列在线 | 91精品国产全国免费观看| 国产小视频精品| 992tv国产精品成人影院| 色网综合在线观看| 日本新janpanese乱熟| 中文字幕在线官网| 日韩欧美aaa| 国产99久久九九精品无码| 草草在线视频| 欧美日韩一区二区精品| 久久精品国产精品亚洲色婷婷| 2021天堂中文幕一二区在线观| 亚洲一区二区三区中文字幕在线 | 国产大屁股喷水视频在线观看| 少妇精品久久久一区二区三区| 亚洲码在线观看| 久久久视频6r| 久久一级电影| 久久亚洲精品一区| 久久这里只有精品免费| 亚洲巨乳在线| 日本精品中文字幕| 久草热在线观看| 国产一区在线看| 国产一区二区三区四区五区加勒比 | 69精品无码成人久久久久久| 日韩成人综合| 欧美猛男性生活免费| 日韩欧美不卡视频| 久久久久国内| 成人有码在线视频| 全国男人的天堂网| 久久久久久久久岛国免费| 婷婷久久青草热一区二区| 欧美成人精品一区二区男人看| 亚洲欧美福利一区二区| 水蜜桃色314在线观看| 巨茎人妖videos另类| 91麻豆精品国产自产在线| 欧美xxxx日本和非洲| 你微笑时很美电视剧整集高清不卡| 亚洲视频欧洲视频| 最新一区二区三区| 午夜亚洲性色福利视频| 国产欧美日韩精品在线观看| 亚洲av无码国产精品久久不卡| 91亚洲精品一区二区乱码| 少妇免费毛片久久久久久久久| 免费高清完整在线观看| 污片在线观看一区二区| 自拍偷拍21p| 欧美巨大xxxx| 久久综合久久八八| av黄色在线播放| 国产资源精品在线观看| 久久综合久久久| 天使と恶魔の榨精在线播放| 在线观看三级视频欧美| 国产免费无码一区二区| 欧美日韩国产在线观看网站| 久久久视频精品| 在线视频1卡二卡三卡| 成人av电影在线观看| 一级黄色免费在线观看| 第84页国产精品| 日韩欧美国产一二三区| 国产精品18在线| 国产农村妇女精品一区二区| 成人区精品一区二区| 在线a人片免费观看视频| 精品久久久久久久久久久久| 下面一进一出好爽视频| 欧美日韩在线观看视频小说| 97国产suv精品一区二区62| 国产麻豆一精品一男同| 亚洲国产成人午夜在线一区| 亚洲 高清 成人 动漫| 视频精品一区二区三区| 日韩亚洲在线观看| 无码人妻一区二区三区免费 | 黄色国产在线播放| 性欧美xxxx大乳国产app| 超碰97人人人人人蜜桃| 国产激情在线| 在线播放欧美女士性生活| 免费黄色片网站| 日日骚欧美日韩| 免费看污久久久| 精品三级久久| 亚洲国产成人久久综合| 久久精品欧美一区二区| 国产精品1区二区.| 欧美一级中文字幕| 麻豆精品一区| 九九热这里只有精品6| 国产精品视频久久久久久| 国产精品九色蝌蚪自拍| 久热精品在线播放| 四虎国产精品免费观看| 国产日韩精品在线观看| 久久99精品久久久久久野外| 欧美日韩另类一区| 激情五月深爱五月| 激情综合五月婷婷| 国产树林野战在线播放| 日本99精品| 欧美高清视频在线观看| 后进极品白嫩翘臀在线视频| 午夜天堂影视香蕉久久| 人人妻人人澡人人爽人人精品| 先锋影音久久| 日韩尤物视频| 亚洲午夜国产成人| 欧美久久精品午夜青青大伊人| 亚洲成a人片在线| 精品国产乱码久久久久久虫虫漫画| 波多野结衣视频播放| 国产日韩亚洲欧美精品| 欧美日韩综合网| 福利视频一区| 欧美成人小视频| 欧美一区二区黄片| 在线一区二区三区四区| 国产午夜精品理论片在线| 国产大陆精品国产| 久草热视频在线观看| 国产探花在线精品| 国产一区二区色| 欧美卡一卡二| 亚洲欧美日韩中文在线| 亚洲天堂avav| 亚洲影院久久精品| 亚洲精品国产91| 国产一区视频导航| 91国视频在线| 91九色精品| 精品91免费| 欧美黄页免费| 性欧美xxxx交| 日本在线人成| 日韩av有码在线| 91精品国自产| 日韩欧美精品中文字幕| 啪啪一区二区三区| www成人在线观看| 一级黄色片国产| 久久成人在线| 免费观看国产视频在线| 狠狠做六月爱婷婷综合aⅴ| 97在线资源站| 成人免费视频观看| 国语自产精品视频在线看抢先版图片| 国产黄色片在线观看| 日韩精品最新网址| 最近国语视频在线观看免费播放| 一区二区三区四区国产精品| 婷婷色一区二区三区| 成人动漫在线一区| 手机免费看av网站| 首页欧美精品中文字幕| 成人午夜免费在线视频| 日韩免费特黄一二三区| 精品福利影视| 91成人噜噜噜在线播放| 国产欧美日韩91| 吞精囗交69激情欧美| 久久乐国产精品| 成人av福利| 自拍偷拍亚洲在线| 国产在线观看免费| 日韩成人中文字幕| 亚洲精品一区二区三区区别| 欧美精品粉嫩高潮一区二区| 日韩精品成人免费观看视频| 精品女厕一区二区三区| 久久久久99精品成人片试看| 国产精品丝袜黑色高跟| 国产女主播喷水高潮网红在线| www.欧美亚洲| 污网站免费观看| 国产丶欧美丶日本不卡视频| 三级性生活视频| 麻豆成人91精品二区三区| 亚洲人成无码www久久久| 国产精品嫩草99av在线| 日本人体一区二区| 一区二区亚洲精品| 日本黄色片一级片| 亚洲高清免费| 极品美女扒开粉嫩小泬| 在线观看的日韩av| 野外做受又硬又粗又大视频√| 欧美福利电影在线观看| 99亚洲国产精品| 一区二区三区四区日韩| 992tv成人免费观看| 亚洲不卡av不卡一区二区| 99亚洲精品视频| 欧美日韩精选| www.亚洲视频.com| 亚洲黄色三级| www.爱色av.com| 米奇777在线欧美播放| 毛片av免费在线观看| 日韩电影免费在线| 久久99爱视频| 国产成人亚洲综合a∨婷婷图片 | 久久久久免费观看| 免费毛片视频网站| 国产精品久久久久aaaa樱花| 国产午夜精品理论片在线| 一区二区免费视频| 日韩网红少妇无码视频香港| 色综合久久88色综合天天6| 日韩av免费播放| 在线播放日韩导航| 风流老熟女一区二区三区| 亚洲国产精品久久| 国内精品一区视频| 久久精品一偷一偷国产| 激情av在线| 欧美一区二区三区……| 精品久久99| 99精品99久久久久久宅男| 精品少妇一区| 色涩成人影视在线播放| 99久久综合| 成人黄色av片| 久色婷婷小香蕉久久| 91精品人妻一区二区三区蜜桃2| 99在线精品观看| 国产视频123区| 亚洲一卡二卡三卡四卡五卡| 狠狠人妻久久久久久| 欧美三级欧美一级| 俄罗斯嫩小性bbwbbw| 亚洲人成电影网站色…| 成人三级网址| 欧美亚洲激情在线| 99久久这里有精品| 久久av一区二区三区漫画| 国产国产精品| 久久久久久久久久久久久国产精品| 美女www一区二区| 亚洲色偷偷色噜噜狠狠99网| 中文字幕精品综合| 久久精品免费在线| 欧美精品乱码久久久久久| 日本成人动漫在线观看| 日韩亚洲一区二区| 老司机2019福利精品视频导航| 亚洲自拍在线观看| 精品视频免费在线观看| 久久99久久99精品| 国内精品视频666| 97人妻精品一区二区免费| 亚洲自拍偷拍图区| 一级黄色片免费看| 亚洲人永久免费| 人狥杂交一区欧美二区| 亚洲综合在线中文字幕| 成人综合专区| 日本一本二本在线观看| 国产a区久久久| 国产精品丝袜一区二区| 欧美亚洲国产怡红院影院| 欧美少妇bbw| 九九热精品视频国产| 日本免费成人| 午夜精品一区二区三区在线观看| 在线亚洲成人| 中文字幕第3页| 洋洋av久久久久久久一区| 国产精品久久久久久免费| 在线播放日韩av| 国产综合色区在线观看| 精品人伦一区二区三区| 一区二区在线| 午夜大片在线观看| 中文字幕一区日韩精品欧美| 国产成人自拍偷拍| 亚洲人成网在线播放| 免费成人在线电影| 久久er99热精品一区二区三区| 国产一区观看| 岛国精品一区二区三区| 亚洲一区二区视频| 日韩一级片免费在线观看| 欧美激情videos| 粉嫩的18在线观看极品精品| 日韩视频在线视频| 成人黄色综合网站| 日本一二三区不卡| 亚洲国产成人在线播放| www视频在线观看| 精品久久久久久乱码天堂| 99精品欧美| 蜜桃精品成人影片| 91成人免费在线| 自拍视频在线免费观看| 国产主播精品在线| 亚洲一区二区三区| 69久久精品无码一区二区| 亚洲国产精品久久艾草纯爱 | 精品亚洲二区| 欧美 日韩 国产精品| 成人免费精品视频| 日韩欧美成人一区二区三区| 亚洲欧美在线x视频| 午夜av成人| 三年中国中文在线观看免费播放| 国产美女在线观看一区| 久久久久久久久久久久久久免费看| 精品日韩99亚洲| www.com.cn成人| 亚洲国产日韩综合一区| 国产一区视频在线看| 五月天婷婷丁香| 国产亚洲欧洲黄色| av在线精品| 国产69精品久久久久久久| 久久久91精品国产一区二区精品| 中文字幕人妻一区二区三区视频| 久久亚洲精品视频| 日韩av三区| 四季av一区二区三区| 亚洲一区二区五区| 国产在线一在线二| av在线亚洲男人的天堂| 亚洲综合电影一区二区三区| jizzjizzjizz国产| 精品久久人人做人人爰| 怡红院成人在线| 中文字幕在线中文| 久久久一区二区三区| 99热这里只有精品在线观看| 欧美一级大片在线免费观看| 久久中文视频| 国产精品久久AV无码| 欧美日韩亚洲丝袜制服| bbw在线视频| 亚洲午夜在线观看| 99久久精品免费看| 91亚洲国产成人久久精品麻豆 | 99久久er| 久久久久久久9| 国产精品久久久99| 色视频免费在线观看| 99久久一区三区四区免费| 青青草97国产精品免费观看无弹窗版| 精国产品一区二区三区a片| 国产亚洲精品一区二555|