gpt4 book ai didi

java - Hibernate 注释与集合

转载 作者:行者123 更新时间:2023-12-01 17:36:53 25 4
gpt4 key购买 nike

我正在尝试使用 hibernate 注释来实现我的模型。我有 3 个类:图像、人物和标签。 Tags 是一个由 4 个字段组成的表,id、personId、imageId 和createdDate。 Person 有 name、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;
}

如果我删除 getPersons() 方法上的注释,我可以使用这些类并添加和删除记录。我想获取带有图像的所有标签,并且我正在尝试使用一组标签。我不断收到以下错误:

org.hibernate.LazyInitializationException - failed to lazily initialize a collection of role: com.exmaple.persons, no session or session was closed

有人可以帮助我并让我知道我做错了什么吗?

谢谢

最佳答案

此错误消息 - 实际上与您的关联映射策略或注释无关 - 意味着您在 Session 结束后尝试访问域对象之一上的延迟加载集合已关闭。

解决方案是禁用此集合的延迟加载,在 Session 关闭之前显式加载该集合(例如,通过调用 foo.getBars().size() ),或者确保Session保持打开状态,直到不再需要为止。

如果您不确定什么是延迟加载,here is the section in the Hibernate manual .

关于java - Hibernate 注释与集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399879/

25 4 0
文章推荐: java - float 字
文章推荐: java 泛型 - 将 List 转换为 List