blo*_*824 0 java collections configuration annotations hibernate
我正在尝试使用hibernate注释实现我的模型.我有3个班级,图像,人物和标签.标签是由4个字段组成的表,id,personId,imageId和createdDate.Person有字段名,id,birthdate等.我的图像类定义如下:
@Entity
@Table(name="Image")
public class Image {
private Integer imageId;
private Set<Person> persons = new HashSet<Person>();
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
public Integer getImageId() {
return imageId;
}
public void setImageId(Integer imageId) {
this.imageId = imageId;
}
@ManyToMany
@JoinTable(name="Tags",
joinColumns = {@JoinColumn(name="imageId", nullable=false)},
inverseJoinColumns = {@JoinColumn(name="personId", nullable=false)})
public Set<Person> getPersons() {
return persons;
}
public void setPersons(Set<Person> persons) {
this.persons = persons;
}
Run Code Online (Sandbox Code Playgroud)
如果我删除了getPersons()方法上的注释,我可以使用这些类并添加和删除记录.我想用图像获取所有标签,我正在尝试使用一组.我一直收到以下错误:
org.hibernate.LazyInitializationException - failed to lazily initialize a collection of role: com.exmaple.persons, no session or session was closed
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我,让我知道我做错了什么?
谢谢
此错误消息 - 实际上与您的关联映射策略或注释无关 - 意味着您Session在关闭后尝试访问其中一个域对象上的延迟加载集合.
解决方案是为此集合禁用延迟加载,在Session关闭之前显式加载集合(例如,通过调用foo.getBars().size()),或确保在Session不再需要之前保持打开状态.
如果您不确定延迟加载是什么,请参阅Hibernate手册中的部分.