package model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

/**
 * 聊天群
 * 
 * @author wangfei
 * @time 2015-04-02
 */
@Entity
@Table(name = "user_group")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Group {
	public static final String GROUP_ID = "groupId";
	
	private int groupId;
	private String createrId;
	private String groupName;
	private List<User> memberList;

	public Group() {
	}

	public Group(String groupName) {
		setGroupName(groupName);
	}

	@Id
	@Column(name = "group_id", columnDefinition = "int(8)  COMMENT '聊天群Id'")
	@GeneratedValue(strategy = GenerationType.AUTO)
	public int getGroupId() {
		return groupId;
	}

	public void setGroupId(int groupId) {
		this.groupId = groupId;
	}

	@Column(name = "creater_id", columnDefinition = "char(20)  COMMENT '微信号'")
	public String getCreaterId() {
		return createrId;
	}

	public void setCreaterId(String createrId) {
		this.createrId = createrId;
	}

	@Column(name = "group_name", columnDefinition = "char(20)  COMMENT '聊天群昵称'")
	public String getGroupName() {
		return groupName;
	}

	public void setGroupName(String groupName) {
		this.groupName = groupName;
	}

	@ManyToMany(targetEntity = User.class, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	@JoinTable(name = "group_members", joinColumns = @JoinColumn(name = "group_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
	public List<User> getMemberList() {
		return memberList;
	}

	public void setMemberList(List<User> memberList) {
		this.memberList = memberList;
	}

	public String toString() {
		return "GroupId : " + this.groupId
				+ "; GroupName : " + this.groupName
				+ "; CreaterId : " + this.getCreaterId()
				+ "; MemberList : " + this.getMemberList().toString();
	}

}