ManyToMany(基于注解)使用之进阶(中级版)
2016-07-10 11:12
337 查看
社团和成员就是多对多的关系,一个成员有多个社团,一个社团也有多个成员,这里的多对多映射采用中间表连接的映射策略,建立中间表的映射策略,建立中间表分别引入俩边的主键作为外键。通过中间表映射俩个表之间的关系。
下面就以社团类和成员类为例介绍多对多的映射关系的实例
Club实体类
成员类
测试类
使用的maven管理个人使用通过 仅作参考
下面就以社团类和成员类为例介绍多对多的映射关系的实例
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> member = new HashSet<Member>(); 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<Member> getMember() { return member; } public void setMember(Set<Member> 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> club = new HashSet<Club>();// 成员持有的社团集合 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<Club> getClub() { return club; } public void setClub(Set<Club> 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<Member> st = new HashSet<Member>(); 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<Club> st = new HashSet<Club>(); 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<Member> members = memberService.findAll(); for (Member member : members) { Iterator<Club> 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<Member> members = memberService.findAll(page); for (Member member : members) { System.out.println(member.getMemberClass()); } } @Test public void delete() { memberService.delete(11); } }
使用的maven管理个人使用通过 仅作参考
相关文章推荐
- 交换机升级排障实例
- C#实现DataTable映射成Model的方法(附源码)
- sql2008启动代理未将对象应用到实例解决方案
- "虚拟路径"..."映射到另一个应用程序,这是不允许的!
- Ajax教程实例详解
- 初识JQuery 实例一(first)
- JQuery入门基础小实例(1)
- Jquery具体实例介绍AJAX何时用,AJAX应该在什么地方用
- 一个小助手批处理实例代码
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- XStream使用方法总结附实例代码
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- asp.net得到本机数据库实例的两种方法代码
- hibernate中的增删改查实现代码