Java自学之路-Java中级教程-42:Hibernate多对多@ManyToMany映射关系以及中间表@JoinTable

有一对一,多对一和一对多,当然还有多对多,现实中也有不少例子,比如交友关系,一个人可以交到多个朋友,也可以是多个人的朋友。还有班级和学生,一个班级可以有多个学生,一个学生也可以在多个班级上课。


Hibernate使用@ManyToMany注解表示多对多,这里在Person.java类中定义一个friends属性。除了@ManyToMany注解,还需要一个@JoinTable注解作为关系表,表名为person_friend,生成朋友的对应关系。另外,joinColumns 和inverseJoinColumns 分别代表主方和对方,也就是一个是另一个对方的朋友,对应的字段名为person_idfriend_id


@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "person_friend",

joinColumns = @JoinColumn(name = "person_id"),

inverseJoinColumns = @JoinColumn(name = "friend_id"))
private Set friends;


public Set getFriends() {
return friends;
}

public void setFriends(Set friends) {
this.friends = friends;
}

重启服务后,在数据库里有一张中间表person_friend生成了。现在从页面输入一个fids的字段,把id用逗号隔开输入并传入到PersonController.java中。PersonForm.java用于接收参数的变量定义为fids。


private String fids;

public String getFids() {
return fids;
}
public void setFids(String fids) {
this.fids = fids;
}

在PersonController.java中把fids参数用逗号隔开放入数组,再按id把Person记录查询出来放到集合Set中,给newPerson设置friends属性存入数据库。


	@RequestMapping(value = "/inputPerson", method = RequestMethod.POST)
	public Object inputPerson(HttpServletRequest request, HttpServletResponse response, PersonForm personForm) {
		try {
//			String id = request.getParameter("id");
//			String nation = request.getParameter("nation");
//			
//			String information = request.getParameter("information");
			
			Person parent = personService.findPerson(personForm.getPid());
			
			Set friendSet = new HashSet();
			
			String friendIds = personForm.getFids();
			String[] friendArray = friendIds.split(",");
			for(int i=0; i < friendArray.length; i ++) { Person friend = personService.findPerson(friendArray[i]); friendSet.add(friend); } Person newPerson = new Person(); newPerson.setId(Integer.parseInt(personForm.getId())); newPerson.setNation(personForm.getNation()); newPerson.setInformation(personForm.getInformation()); newPerson.setGender(personForm.getGender()); newPerson.setHobby(personForm.getHobby()); newPerson.setParent(parent); newPerson.setFriends(friendSet); personService.addPerson(newPerson); Person person = personService.findPerson(personForm.getId()); request.setAttribute("person", person); } catch (Exception e) { e.printStackTrace(); } return "index"; }



在页面上输入fids的值12,13,14这些,提交后保存到数据表,现在表中就有了三条新的记录,代表这些记录之间的朋友关系。




Java视频教程



猜你喜欢

转载自blog.csdn.net/weixin_41239710/article/details/80953216