欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統 1785 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條評論
主站蜘蛛池模板: 国产一区久久精品 | 天天舔天天舔 | 一级欧美毛片成人 | 成人黄视频在线观看 | 太平公主一级艳史播放高清 | 麻豆国产 | 亚洲国产片高清在线观看 | 日韩专区中文字幕 | 激情伊人网 | 国产一区二区三区在线看片 | 日韩亚洲一区二区三区 | 久久99免费观看 | 亚洲国产精品一区二区第一页 | 色播视频在线观看 | 9久久99久久久精品齐齐综合色圆 | 国产欧美日韩综合精品一区二区 | 伊人久久精品成人网 | 亚洲成人精品 | 亚洲欧美电影 | 色综合综合色 | 精品性久久 | 清纯唯美综合网 | 精品国产第一国产综合精品gif | 天天做天天爱天天大综合 | 日韩欧美视频免费观看 | 婷婷在线观看网站 | 久久亚洲国产高清 | 久久精品免费观看 | 91.成人天堂一区 | 久草成人网 | 亚洲在线播放视频 | 机器人男友 | 日本一区二区三区免费观看 | 国产精品福利视频手机免费观看 | hdfreexxxx中国妞| 午夜剧场操一操 | 我的朋友丈夫 | 日韩视频专区 | 久久大香香蕉国产免费网站 | 欧美一级小视频 | 久草中文在线观看 |