数据库结构:
create
table
team2(id
varchar
(
50
)
primary
key
,name
varchar
(
50
));
create
table
member2(id
varchar
(
50
)
primary
key
,name
varchar
(
50
),age
varchar
(
50
));
create
table
memberAtTeams2(member
varchar
(
50
),team
varchar
(
50
),teamRoles
varchar
(
50
));
实体对象:
package
mapmanytomany;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.util.HashMap;
import
java.util.Map;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
Team
...
{
private String id;
private String name;
private Map members=new HashMap();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getId() ...{
return id;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setId(String id) ...{
this.id = id;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public Map getMembers() ...{
return members;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setMembers(Map members) ...{
this.members = members;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getName() ...{
return name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setName(String name) ...{
this.name = name;
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
package
mapmanytomany;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
java.util.HashMap;
import
java.util.Map;
import
java.util.Set;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
Member
...
{
private String id;
private String name;
private String teamRole;
private Map team=new HashMap();
private String age;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getAge() ...{
return age;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setAge(String age) ...{
this.age = age;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getName() ...{
return name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setName(String name) ...{
this.name = name;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getTeamRole() ...{
return teamRole;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setTeamRole(String teamRole) ...{
this.teamRole = teamRole;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getId() ...{
return id;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setId(String id) ...{
this.id = id;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public Map getTeam() ...{
return team;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setTeam(Map team) ...{
this.team = team;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
映射:
<?
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
="mapmanytomany"
>
<
class
name
="Team"
table
="team2"
>
<
id
name
="id"
column
="id"
>
<
generator
class
="uuid.hex"
></
generator
>
</
id
>
<
property
name
="name"
column
="name"
/>
<
map
name
="members"
table
="memberAtTeams2"
cascade
="save-update"
>
<
key
column
="team"
/>
<
index
type
="string"
column
="teamRoles"
/>
<
many-to-many
class
="Member"
column
="member"
></
many-to-many
>
</
map
>
</
class
>
</
hibernate-mapping
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<?
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
="mapmanytomany"
>
<
class
name
="Member"
table
="member2"
>
<
id
name
="id"
column
="id"
>
<
generator
class
="uuid.hex"
></
generator
>
</
id
>
<
property
name
="name"
column
="name"
/>
<
property
name
="age"
column
="age"
/>
<
map
name
="team"
table
="memberAtTeams2"
inverse
="true"
>
<
key
column
="member"
/>
<
index
type
="string"
column
="teamRoles"
></
index
>
<
many-to-many
class
="Team"
column
="team"
></
many-to-many
>
</
map
>
</
class
>
</
hibernate-mapping
>
测试代码:
public
static
void
main(String[] args)
...
{
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession();
Transaction t=session.beginTransaction();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Team team1=new Team();
team1.setName("足球队-01");
Team team2=new Team();
team2.setName("足球队-02");
Member m1=new Member();
m1.setName("张三");
m1.setAge("11");
m1.getTeam().put("主力守门员", team1);
m1.getTeam().put("候选守门员", team2);
Member m2=new Member();
m2.setName("张四");
m2.setAge("22");
m2.getTeam().put("主力中后卫", team1);
m2.getTeam().put("候选中后卫", team2);
team1.getMembers().put("主力守门员", m1);
team1.getMembers().put("主力中后卫", m2);
team2.getMembers().put("候选守门员", m1);
team2.getMembers().put("候选中后卫", m2);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
session.save(team1);
session.save(team2);
t.commit();
System.out.println("success");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
运行结果:
Hibernate: insert into team2 (name, id) values (?, ?)
Hibernate: insert into member2 (name, age, id) values (?, ?, ?)
Hibernate: insert into member2 (name, age, id) values (?, ?, ?)
Hibernate: insert into team2 (name, id) values (?, ?)
Hibernate: insert into memberAtTeams2 (team, teamRoles, member) values (?, ?, ?)
Hibernate: insert into memberAtTeams2 (team, teamRoles, member) values (?, ?, ?)
Hibernate: insert into memberAtTeams2 (team, teamRoles, member) values (?, ?, ?)
Hibernate: insert into memberAtTeams2 (team, teamRoles, member) values (?, ?, ?)
可以看到,新增数据和关系都已经建立好了,在HBM文件中,需要注意的是,在两端的Map标签中,都要描述
<index type="string" column="teamRoles"/> 才能正确写入teamRoles值