Hibernate 表自身映射多对多关系,用户对多朋友

来源:互联网 发布:龙腾世纪3优化差 编辑:程序博客网 时间:2024/05/18 19:18

Entity:

package com.spring.model;import java.util.List;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.ManyToMany;import javax.persistence.Table;@Entity@Table(name="person")public class Person {private int id;private String name;private int age;private List<Person> friends;@Column(name = "age", length = 3)public int getAge() {return age;}@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "ID")public int getId() {return id;}@Column(name = "name", length = 50)public String getName() {return name;}@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = Person.class)@JoinColumn(referencedColumnName = "id",updatable=true, nullable = true)public List<Person> getFriends() {return friends;}public void setAge(int age) {this.age = age;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public void setFriends(List<Person> friends) {this.friends = friends;}}

DAO层需要用到marge这个方法:

public void addFriends(final int[] ids, final int id) {Person p = this.template.get(Person.class, id);// pList<Person> flist = p.getFriends();// 原有的朋友List<Person> list = new ArrayList<Person>();// new friendsfor (int fId : ids) {if (fId != id) {Person f = this.template.get(Person.class, fId);if (!flist.contains(f))list.add(f);}}p.setFriends(list);this.template.merge(p);}

解释:

ids: 是前台传过来的药添加的朋友们的ID

id:用户

思路:

1.自己不能添加自己为朋友;

2.看原来朋友链表里包含要添加的朋友?

3.合并到持久层