社团和成员就是多对多的关系,一个成员有多个社团,一个社团也有多个成员,这里的多对多映射采用中间表连接的映射策略,建立中间表的映射策略,建立中间表分别引入俩边的主键作为外键。通过中间表映射俩个表之间的关系。
下面就以社团类和成员类为例介绍多对多的映射关系的实例
Club实体类
package com.cn.entity;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @ClassName: Club
* @Description: 社团的实体类
* @author: Administrator
* @date: 2016年7月6日 下午3:27:43
*/
@Entity //实体类
@Table(name="iyo_club",catalog="iyo") //哪个数据库那张表
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) //二级缓存
public class Club implements Serializable{
/**
* @fieldName: serialVersionUID
* @fieldType: long
* @Description:
*/
private static final long serialVersionUID = -1576706279212597880L;
private Integer clubId;//社团ID
private String clubIntroction;//社团简介
private String ClubName;//社团名称
private Integer clubLevel;//社团等级
private Integer clubNumber;//社团人数
private Date clubCreateTime;//创建时间
private User user;//创始人
private College college;//所属学院
private Set member = new HashSet();
public Club() {
//super();
}
public Club(String clubIntroction, String clubName, Integer clubLevel, Integer clubNumber, Date clubCreateTime,
User user, College college) {
//super();
this.clubIntroction = clubIntroction;
ClubName = clubName;
this.clubLevel = clubLevel;
this.clubNumber = clubNumber;
this.clubCreateTime = clubCreateTime;
this.user = user;
this.college = college;
}
@Id //主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //数据库自增
public Integer getClubId() {
return clubId;
}
public void setClubId(Integer clubId) {
this.clubId = clubId;
}
public String getClubIntroction() {
return clubIntroction;
}
public void setClubIntroction(String clubIntroction) {
this.clubIntroction = clubIntroction;
}
public String getClubName() {
return ClubName;
}
public void setClubName(String clubName) {
ClubName = clubName;
}
public Integer getClubLevel() {
return clubLevel;
}
public void setClubLevel(Integer clubLevel) {
this.clubLevel = clubLevel;
}
public Integer getClubNumber() {
return clubNumber;
}
public void setClubNumber(Integer clubNumber) {
this.clubNumber = clubNumber;
}
public Date getClubCreateTime() {
return clubCreateTime;
}
public void setClubCreateTime(Date clubCreateTime) {
this.clubCreateTime = clubCreateTime;
}
//多对一外键关联
@JsonIgnoreProperties(value={"permission"})
@ManyToOne
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)//缓存
@JoinTable(name="iyo_club",joinColumns=@JoinColumn(name="userId"),inverseJoinColumns=@JoinColumn(name="userId"))
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@ManyToOne
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@JoinTable(name = "iyo_club", joinColumns = @JoinColumn(name = "collegeId") , inverseJoinColumns = @JoinColumn(name = "collegeId") )
public College getCollege() {
return college;
}
public void setCollege(College college) {
this.college = college;
}
@ManyToMany(targetEntity=Member.class,cascade=CascadeType.PERSIST,fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
//@JoinTable(name = "iyo_memberdesc", joinColumns = { @JoinColumn(name = "clubId") }, inverseJoinColumns = {
// @JoinColumn(name = "memberId") })
@JoinTable(name="iyo_memberdesc",catalog="iyo",joinColumns = {@JoinColumn(name = "clubId",nullable = false, updatable = false)},inverseJoinColumns = {@JoinColumn(name="memberId",nullable = false, updatable = false)})
public Set getMember() {
return member;
}
public void setMember(Set member) {
this.member = member;
}
}
成员类
package com.cn.entity;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @ClassName: Member
* @Description: 成员的实体类
* @author: Administrator
* @date: 2016年7月7日 下午1:39:57
*/
@Entity // 实体类
@Table(name = "iyo_member", catalog = "iyo") // 哪个数据库哪张表
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 二级缓存
public class Member implements Serializable {
/**
* @fieldName: serialVersionUID
* @fieldType: long
* @Description:
*/
private static final long serialVersionUID = 6370397842913431307L;
private Integer memberId;// 成员id
private String memberClass;// 成员所在的班级
private String memberMajor;// 所在专业
private String memberName;// 名字
private String memberIphone;// 电话
private Integer memberCard;// 学号
private Date memberDate;// 加入的时间
private College college;// 所在学院
private User user;// 注册id
private Integer memberCardId;// 卡号
private Set club = new HashSet();// 成员持有的社团集合
public Member() {
}
public Member(String memberClass, String memberMajor, String memberName, String memberIphone, Integer memberCard,
Date memberDate, College college, User user, Integer memberCardId) {
this.memberClass = memberClass;
this.memberMajor = memberMajor;
this.memberName = memberName;
this.memberIphone = memberIphone;
this.memberCard = memberCard;
this.memberDate = memberDate;
this.college = college;
this.user = user;
this.memberCardId = memberCardId;
}
@Id // 主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增
public Integer getMemberId() {
return memberId;
}
public void setMemberId(Integer memberId) {
this.memberId = memberId;
}
public String getMemberClass() {
return memberClass;
}
public void setMemberClass(String memberClass) {
this.memberClass = memberClass;
}
public String getMemberMajor() {
return memberMajor;
}
public void setMemberMajor(String memberMajor) {
this.memberMajor = memberMajor;
}
public String getMemberName() {
return memberName;
}
public void setMemberName(String memberName) {
this.memberName = memberName;
}
@Column(name = "memberIphone", unique = true) // 表示数据库中该字段是唯一的
public String getMemberIphone() {
return memberIphone;
}
public void setMemberIphone(String memberIphone) {
this.memberIphone = memberIphone;
}
public Integer getMemberCard() {
return memberCard;
}
public void setMemberCard(Integer memberCard) {
this.memberCard = memberCard;
}
public Date getMemberDate() {
return memberDate;
}
public void setMemberDate(Date memberDate) {
this.memberDate = memberDate;
}
@Column(name = "memberCardId", unique = true)
public Integer getMemberCardId() {
return memberCardId;
}
public void setMemberCardId(Integer memberCardId) {
this.memberCardId = memberCardId;
}
@ManyToOne
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@JoinTable(name = "iyo_member", joinColumns = @JoinColumn(name = "collegeId") , inverseJoinColumns = @JoinColumn(name = "collegeId") )
public College getCollege() {
return college;
}
public void setCollege(College college) {
this.college = college;
}
// 一对一的外键关联
@JsonIgnoreProperties(value = { "permission" })
@OneToOne
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@JoinTable(name = "iyo_member", joinColumns = @JoinColumn(name = "userId") , inverseJoinColumns = @JoinColumn(name = "userId") )
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
// @JsonIgnoreProperties(value = { "user", "college" }) // 忽略属性
// @ManyToMany(mappedBy="member",cascade=CascadeType.MERGE)
// @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 缓存属性
// @JoinTable(name = "iyo_memberdesc", joinColumns = { @JoinColumn(name = "memberId",referencedColumnName="memberId") }, inverseJoinColumns = {
// @JoinColumn(name = "clubId",referencedColumnName="clubId") })
// @JoinTable(name="iyo_memberdesc",catalog="iyo",joinColumns =
// {@JoinColumn(name = "memberId",nullable = false, updatable =
// false)},inverseJoinColumns = {@JoinColumn(name="clubId",nullable = false,
// updatable = false)})
@JsonIgnoreProperties(value = { "user", "college" }) // 忽略属性
@ManyToMany(targetEntity=Club.class,cascade=CascadeType.PERSIST,fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // 缓存属性
@JoinTable(name="iyo_memberdesc",catalog="iyo",joinColumns = {@JoinColumn(name = "memberId",nullable = false, updatable = false)},inverseJoinColumns = {@JoinColumn(name="clubId",nullable = false, updatable = false)})
public Set getClub() {
return club;
}
public void setClub(Set club) {
this.club = club;
}
}
测试类
package com.cn.service;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.alibaba.fastjson.JSON;
import com.cn.entity.Club;
import com.cn.entity.College;
import com.cn.entity.Member;
import com.cn.entity.Page;
import com.cn.entity.User;
/**
* @ClassName: TestMemberService
* @Description: 新闻类的测试类
* @author: Administrator
* @date: 2016年7月4日 下午2:57:05
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml", "classpath:spring-hibernate.xml" })
public class TestMemberService {
private static final Logger LOGGER = Logger.getLogger(TestMemberService.class);
@Autowired
private MemberService memberService;
@Autowired
private ClubService clubService;
@Test
public void save() {
Member member = new Member();
member = memberService.get(14);
Member member1 = memberService.get(12);
// Integer id = memberService.save(member);
Set st = new HashSet();
st.add(member);
st.add(member1);
Club club = new Club();
club = clubService.get(31);
// club.getMember().add(member);
System.out.println(club.getClubId());
clubService.save(club);
//LOGGER.info(JSON.toJSONString(id));
}
@Test
public void savess() {
Club club = new Club();
club = clubService.get(37);
// Integer id = memberService.save(member);
Set st = new HashSet();
st.add(club);
Member member = new Member();
member = memberService.get(12);
//ManyToMang的多对多测插入
member.getClub().add(club);
memberService.saveOrUpdate(member);
//LOGGER.info(JSON.toJSONString(id));
}
@Test
public void saves() {
Member member = new Member();
member.setMemberCard(2013081426);
member.setMemberClass("计科13w4");
member.setMemberDate(new Date());
member.setMemberIphone("1589e2436786");
member.setMemberMajor("计算机科学r与技术");
member.setMemberName("琪q琪");
User user = new User();
user.setUserId(2);
member.setUser(user);
College college = new College();
college.setCollegeId(2);
member.setCollege(college);
member.setMemberCardId(123456);
Integer id = memberService.save(member);
LOGGER.info(JSON.toJSONString(id));
}
//查询关联表中的数据
@Test
public void findAll() {
List members = memberService.findAll();
for (Member member : members) {
Iterator it = member.getClub().iterator();
while(it.hasNext()){
Club club = it.next();
System.out.println(club.getClubIntroction());
}
}
}
@Test
public void findAlls() {
Page page = new Page();
page.setCurrentPage(1);
page.setTotalNumber(memberService.count());
List members = memberService.findAll(page);
for (Member member : members) {
System.out.println(member.getMemberClass());
}
}
@Test
public void delete() {
memberService.delete(11);
}
}
使用的maven管理个人使用通过 仅作参考