在数据表结构的层面, 我们一般是将多对多的两个数据表转换为两组多对一的关系来实现。
一、 POJO 类 及 xxx.hbm.xml 配置文件
都是 对象集合字段
public class Activity {
private int id;
private String aname;
private Set member = new HashSet();
...
}
public class Member {
private int id;
private String mname;
private Set activity = new HashSet();
....
}
Activity 类 配置文件
Member 类 配置文件
双向的多对多: 1: 中间表用同一个 2: 其中一端一定要设置 inverse="true", 避免两房都去维护中间, 造成冲突 3: 两端的 many-to-many 指定的类交叉相同
二、 junit 测试
@Test
public void test() {
/*Activity activity1 = new Activity();
activity1.setAname("建军节");
Activity activity2 = new Activity();
activity2.setAname("建党节");
Member member1 = new Member();
member1.setMname("成员1");
Member member2 = new Member();
member2.setMname("成员2");
//双向关联关系
activity1.getMember().add(member1);
activity1.getMember().add(member2);
member1.getActivity().add(activity1);
member2.getActivity().add(activity1);
activity2.getMember().add(member2);
member2.getActivity().add(activity2);
session.save(activity1);
session.save(activity2);
session.save(member1);
session.save(member2);*/
Member member = session.get(Member.class, 2);
Set activity = member.getActivity();
System.out.println(activity.size());
for (Activity activity2 : activity) {
System.out.println(activity2.getAname());
}
/*Activity activity = session.get(Activity.class, 1);
Set member = activity.getMember();
System.out.println(member.size());
for (Member member2 : member) {
System.out.println(member2.getMname());
}*/
}
CRUD 与前面讲的类同
表的结构:
此处中间表(联合主键):