关闭

hibernate中的many-to-many问题

177人阅读 评论(0) 收藏 举报
//此为一个News类
@SuppressWarnings("deprecation")
@Entity
@Indexed(index="News")
public class News implements Serializable{
    private Set<User> users=new HashSet<User>();

@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy="news")
	public Set<User> getUser() {
		return users;
	}
	public void setUser(Set<User> user) {
		this.users = users;
	}
}

//此为一个User类
@Entity
@Table(name = "user")
public class User implements Serializable{
   private Set<News> news = new HashSet<News>();
   @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
	@JoinTable(name = "User_News",   
		joinColumns ={@JoinColumn(name = "user_ID", referencedColumnName = "id") },   
		inverseJoinColumns ={@JoinColumn(name = "news_ID", referencedColumnName = "id") } 
	)  
	public Set<News> getNews() {
		return news;
	}
	public void setNews(Set<News> news) {
		this.news = news;
	}
	public void addTargetNews(News news) {
		this.news.add(news);
	}
}
News类和User类为多对多关系,这里需要注意两点:1、注意News类中<span style="font-family: Arial, Helvetica, sans-serif;">mappedBy,拥有这个字段的类为被控类,被控类中的数据删除受到主控类的限制,若主控类中还有被控类中数据的引用,则被控类中的数据不能被删除;2、User类中的JoinTable为主控类所有,代表多对多关系的一个独立的表,name为表名,joinColumns代表此此类在表中的关系,name为此类对应表的字段名,referencedColumnName代表本类的主键名,同理inverseJoinColumns为表的另一端的关系,即News方。</span><pre name="code" class="java">


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2606次
    • 积分:44
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档