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 ));
实体对象:
import java.util.HashMap;
import java.util.Map;
public class Team ... {
private String id;
private String name;
private Map members=new HashMap();
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
public Map getMembers() ...{
return members;
}
public void setMembers(Map members) ...{
this.members = members;
}
public String getName() ...{
return name;
}
public void setName(String name) ...{
this.name = name;
}
}
package mapmanytomany;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Member ... {
private String id;
private String name;
private String teamRole;
private Map team=new HashMap();
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 Map getTeam() ...{
return team;
}
public void setTeam(Map team) ...{
this.team = team;
}
}
映射:
<! 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 >
<? 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 >
测试代码:
Configuration cfg=new Configuration();
cfg.configure();
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession();
Transaction t=session.beginTransaction();
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);
session.save(team1);
session.save(team2);
t.commit();
System.out.println("success");
}
运行结果:
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值