hibernate manytomany
public class Tag implements Serializable {
private ArrayList<Advertisement> advertisements = new ArrayList<Advertisement>();
@ManyToMany(mappedBy="tags")
public ArrayList<Advertisement> getAdvertisements() {
return advertisements;
}
在Advertisement中:
@Entity
public class Advertisement implements Serializable {
private Set<Tag> tags = new HashSet<Tag>();
@ManyToMany
@JoinTable(name = "advertisement_tag",
joinColumns={@JoinColumn(name="advertisementId")},
inverseJoinColumns={@JoinColumn(name="tagId")})
public Set<Tag> getTags() {
return tags;
}
}
测试方法:
Tag t = (Tag) dao.find(2);
//查找已有的tag
Advertisement a = (Advertisement) dao1.find(4);
//查找已有的广告帖
a.getTags().add(t);
//在广告帖的标签list中添加t
dao1.update(a);
//更新到数据库中
此时会抛出org.hibernate.LazyInitializationException:
failed to lazily initialize a collect 的错:
这个异常大致意思:在多对一的时候(并且lazy="false"),对象的实例失败。
所以应该是默认为lazy加载,于是设置lazy=false应该就可以了。
修改如下:
在Tag中:
public class Tag implements Serializable {
private ArrayList<Advertisement> advertisements = new ArrayList<Advertisement>();
@ManyToMany(mappedBy="tags",fetch=FetchType.EAGER )
public ArrayList<Advertisement> getAdvertisements() {
return advertisements;
}
在Advertisement中:
@Entity
public class Advertisement implements Serializable {
private Set<Tag> tags = new HashSet<Tag>();
@ManyToMany(fetch=FetchType.EAGER )
@JoinTable(name = "advertisement_tag",
joinColumns={@JoinColumn(name="advertisementId")},
inverseJoinColumns={@JoinColumn(name="tagId")})
public Set<Tag> getTags() {
return tags;
}
}