使用Map映射,index部分可以使用组件,也可以使用持久话类,本例使用<index-many-to-many>来实现使用持久话类为map映射定义index
数据库结构:
CREATE
TABLE
`team4` (
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 50 ) default NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = gb2312;
CREATE TABLE `member4` (
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 50 ) default NULL ,
`age` varchar ( 50 ) default NULL ,
`team` varchar ( 50 ) default NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = gb2312;
CREATE TABLE `position` (
`id` varchar ( 50 ) NOT NULL ,
`role` varchar ( 50 ) NOT NULL ,
`scene` varchar ( 50 ) NOT NULL ,
`bestchoice` varchar ( 50 ) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = gb2312;
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 50 ) default NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = gb2312;
CREATE TABLE `member4` (
`id` varchar ( 50 ) NOT NULL ,
`name` varchar ( 50 ) default NULL ,
`age` varchar ( 50 ) default NULL ,
`team` varchar ( 50 ) default NULL ,
PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = gb2312;
CREATE TABLE `position` (
`id` varchar ( 50 ) NOT NULL ,
`role` varchar ( 50 ) NOT NULL ,
`scene` varchar ( 50 ) NOT NULL ,
`bestchoice` varchar ( 50 ) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = gb2312;
持久话类:
package
mapindexmanytomany;
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 mapindexmanytomany;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Member ... {
private String id;
private String name;
private Position postition;
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 Position getPostition() ...{
return postition;
}
public void setPostition(Position postition) ...{
this.postition = postition;
}
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 mapindexmanytomany;
public class Position ... {
private String id;
private String role;
private String scene;
private Member bestChoice;
public Member getBestChoice() ...{
return bestChoice;
}
public void setBestChoice(Member bestChoice) ...{
this.bestChoice = bestChoice;
}
public String getRole() ...{
return role;
}
public void setRole(String role) ...{
this.role = role;
}
public String getScene() ...{
return scene;
}
public void setScene(String scene) ...{
this.scene = scene;
}
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
}
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 mapindexmanytomany;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Member ... {
private String id;
private String name;
private Position postition;
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 Position getPostition() ...{
return postition;
}
public void setPostition(Position postition) ...{
this.postition = postition;
}
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 mapindexmanytomany;
public class Position ... {
private String id;
private String role;
private String scene;
private Member bestChoice;
public Member getBestChoice() ...{
return bestChoice;
}
public void setBestChoice(Member bestChoice) ...{
this.bestChoice = bestChoice;
}
public String getRole() ...{
return role;
}
public void setRole(String role) ...{
this.role = role;
}
public String getScene() ...{
return scene;
}
public void setScene(String scene) ...{
this.scene = scene;
}
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
}
映射文件:
其中 <index-many-to-many class="Position" column="id"></index-many-to-many>定义了,数据表Position的主键id值使用Member表的主键数值
<?
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 ="mapindexmanytomany" >
< class name ="Team" table ="team4" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="name" column ="name" />
< map name ="members" inverse ="false" cascade ="all" >
< key column ="team" ></ key >
< index-many-to-many class ="Position" column ="id" ></ index-many-to-many >
< one-to-many class ="Member" />
</ 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 ="mapindexmanytomany" >
< class name ="Member" table ="member4" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="name" column ="name" />
< property name ="age" column ="age" />
< many-to-one name ="team" ></ many-to-one >
</ 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 ="mapindexmanytomany" >
< class name ="Position" table ="position" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="role" column ="role" />
< property name ="scene" column ="scene" />
< many-to-one name ="bestChoice" column ="bestchoice" cascade ="save-update" ></ many-to-one >
</ class >
</ hibernate-mapping >
<! 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 ="mapindexmanytomany" >
< class name ="Team" table ="team4" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="name" column ="name" />
< map name ="members" inverse ="false" cascade ="all" >
< key column ="team" ></ key >
< index-many-to-many class ="Position" column ="id" ></ index-many-to-many >
< one-to-many class ="Member" />
</ 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 ="mapindexmanytomany" >
< class name ="Member" table ="member4" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="name" column ="name" />
< property name ="age" column ="age" />
< many-to-one name ="team" ></ many-to-one >
</ 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 ="mapindexmanytomany" >
< class name ="Position" table ="position" >
< id name ="id" column ="id" >
< generator class ="uuid.hex" ></ generator >
</ id >
< property name ="role" column ="role" />
< property name ="scene" column ="scene" />
< many-to-one name ="bestChoice" column ="bestchoice" cascade ="save-update" ></ many-to-one >
</ 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();
Team team1=new Team();
team1.setName("足球队-01");
Member m1=new Member();
m1.setName("张三");
m1.setAge("11");
Member m2=new Member();
m2.setName("张四");
m2.setAge("22");
Position p1=new Position();
p1.setRole("守门员");
p1.setScene("上半场");
p1.setBestChoice(m1);
Position p2=new Position();
p2.setRole("中后卫");
p2.setScene("下半场");
p2.setBestChoice(m2);
team1.getMembers().put(p1, m1);
team1.getMembers().put(p2, m2);
session.save(p1);
session.save(p2);
session.save(team1);
t.commit();
System.out.println("success");
}
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");
Member m1=new Member();
m1.setName("张三");
m1.setAge("11");
Member m2=new Member();
m2.setName("张四");
m2.setAge("22");
Position p1=new Position();
p1.setRole("守门员");
p1.setScene("上半场");
p1.setBestChoice(m1);
Position p2=new Position();
p2.setRole("中后卫");
p2.setScene("下半场");
p2.setBestChoice(m2);
team1.getMembers().put(p1, m1);
team1.getMembers().put(p2, m2);
session.save(p1);
session.save(p2);
session.save(team1);
t.commit();
System.out.println("success");
}
运行结果:
Hibernate: insert into member4 (name, age, team, id) values (?, ?, ?, ?)
Hibernate: insert into position (role, scene, bestchoice, id) values (?, ?, ?, ?)
Hibernate: insert into member4 (name, age, team, id) values (?, ?, ?, ?)
Hibernate: insert into position (role, scene, bestchoice, id) values (?, ?, ?, ?)
Hibernate: insert into team4 (name, id) values (?, ?)
Hibernate: update member4 set team=?, id=? where id=?
Hibernate: update member4 set team=?, id=? where id=?