黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Hibernate一對多使用Map和Set的區別

系統 2043 0

?使用Map和Set的集合映射,都可以配合1對多,但是其中還是有細微的差別,主要體現在一方的inverse屬性上

數據庫結構如下:
其中member表的team字段對應team的id

CREATE ? TABLE ?`member1`?(
??`id`?
varchar ( 50 )? NOT ? NULL ,
??`name`?
varchar ( 50 )? default ? NULL ,
??`age`?
varchar ( 50 )? default ? NULL ,
??`teamRole`?
varchar ( 50 )? default ? NULL ,
??`team`?
varchar ( 50 )? default ? NULL ,
??
PRIMARY ? KEY ??(`id`)
)?ENGINE
= InnoDB? DEFAULT ?CHARSET = gb2312;

CREATE ? TABLE ?`team1`?(
??`id`?
varchar ( 50 )? NOT ? NULL ,
??`name`?
varchar ( 50 )? default ? NULL ,
??
PRIMARY ? KEY ??(`id`)
)?ENGINE
= InnoDB? DEFAULT ?CHARSET = gb2312;

?

持久話類(使用Set方式)

?

package ?maponetomany;

public ? class ?Member? ... {
????
private ?String?id;
???
private ?String?name;
???
private ?String?teamRole;
???
private ?Team?team;
???
private ?String?age;
public ?String?getAge()? ... {
????
return ?age;
}

public ? void ?setAge(String?age)? ... {
????
this .age? = ?age;
}


public ?String?getName()? ... {
????
return ?name;
}

public ? void ?setName(String?name)? ... {
????
this .name? = ?name;
}



public ?String?getTeamRole()? ... {
????
return ?teamRole;
}

public ? void ?setTeamRole(String?teamRole)? ... {
????
this .teamRole? = ?teamRole;
}

public ?String?getId()? ... {
????
return ?id;
}

public ? void ?setId(String?id)? ... {
????
this .id? = ?id;
}

public ?Team?getTeam()? ... {
????
return ?team;
}

public ? void ?setTeam(Team?team)? ... {
????
this .team? = ?team;
}

}


package ?maponetomany;

import ?java.util.HashSet;
import ?java.util.Map;
import ?java.util.Set;

public ? class ?Team? ... {
???
private ?String?id;
???
private ?String?name;
???
private ?Set?members = new ?HashSet();
public ?String?getId()? ... {
????
return ?id;
}

public ? void ?setId(String?id)? ... {
????
this .id? = ?id;
}


public ?Set?getMembers()? ... {
????
return ?members;
}

public ? void ?setMembers(Set?members)? ... {
????
this .members? = ?members;
}

public ?String?getName()? ... {
????
return ?name;
}

public ? void ?setName(String?name)? ... {
????
this .name? = ?name;
}

}


這是相應的HBM映射文件
<? xml?version="1.0"?encoding="utf-8" ?>
<! DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- ?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
< hibernate-mapping? package ="maponetomany" >
???
????
?????
< class? name ="Member" ?table ="member1" >
???????
< id? name ="id" ?column ="id" >
?????????
< generator? class ="uuid.hex" ></ generator >
???????
</ id >
???????
< property? name ="name" ?column ="name" />
???????
< property? name ="age" ?column ="age" />
???????
< property? name ="teamRole" ?column ="teamRole" ? />
???????
< many-to-one? name ="team" ?column ="team" ? />
????
</ class >
</ hibernate-mapping >


<? xml?version="1.0"?encoding="utf-8" ?>
<! DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- ?
????Mapping?file?autogenerated?by?MyEclipse?-?Hibernate?Tools
-->
< hibernate-mapping? package ="maponetomany" >
????
< class? name ="Team" ?table ="team1" >
???????
< id? name ="id" ?column ="id" >
?????????
< generator? class ="uuid.hex" ></ generator >
???????
</ id >
???????
< property? name ="name" ?column ="name" />
???????
< set? name ="members" ?inverse ="true" ?cascade ="save-update" >
??????????
< key? column ="team" />
??????????
< one-to-many? class ="Member" />
???????
</ set >
????
</ class >
</ hibernate-mapping >

以下是測試代碼:
這里要注意的是,member的teamRole屬性是通過javabean的set方式注入的,用Map實現時,則是作為map的index屬性去注入,沒有在代碼中顯示的調用set方法,這也是本文討論的重點
public ? static ? void ?main(String[]?args)? ... {
????????Configuration?cfg
= new ?Configuration();
????????cfg.configure();
????????SessionFactory?sf
= cfg.buildSessionFactory();
????????Session?session
= sf.openSession();
????????Transaction?t
= session.beginTransaction();

????????Team?team
= new ?Team();
????????team.setName(
" 足球隊-01 " );
????????

????????
????????Member?m1
= new ?Member();
????????m1.setName(
" 01隊01號 " );
????????m1.setAge(
" 22 " );
????????m1.setTeam(team);
????????m1.setTeamRole(
" 中后衛 " );
????????
????????Member?m2
= new ?Member();
????????m2.setName(
" 01隊02號 " );
????????m2.setAge(
" 33 " );
????????m2.setTeam(team);
????????m2.setTeamRole(
" 守門員 " );
????????
????????team.getMembers().add(m1);
????????team.getMembers().add(m2);

???????
????????session.save(team);


????????t.commit();
????????System.out.println(
" success " );

????}


運行結果如下:
Hibernate: insert into team1 (name, id) values (?, ?)
Hibernate: insert into member1 (name, age, teamRole, team, id) values (?, ?, ?, ?, ?)
Hibernate: insert into member1 (name, age, teamRole, team, id) values (?, ?, ?, ?, ?)

可以看到,兩個表的數據都插入了,而且關聯正確(member的team值為team表的id)

如果我們改成Map方式,則需要改變持久話類的代碼和映射文件,如下:
持久話類變化不大,只不過是把Set換成Map,但映射文件變化較大

?

package ?maponetomany;

Hibernate一對多使用Map和Set的區別


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論