我有使用JPA 2.0和Hibernate作为持久性提供程序的应用程序。我正在使用EntityManager来构建我的查询。
我正在体验大数据集上的经典org.hibernate.HibernateException: collection is not associated with any session
错误。当我尝试仅提取一些Datapoints时,它正常工作,但是一旦我提取了30多个结果,我就会收到org.hibernate.HibernateException: collection is not associated with any session
错误。我以为自从使用fetch = FetchType.EAGER
以来我不应该得到它。
任何帮助将不胜感激!
这是我的两个实体。 DatapointView:
@Entity
@Table(name = "DATAPOINT_VIEW")
public class DatapointView implements Serializable {
...many fields...
@OneToMany(fetch = FetchType.EAGER )
@JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
private List<ExperimentViewEntity> experiments= new ArrayList<ExperimentViewEntity>();
...
}
ExperimentViewEntity:
@Entity
@javax.persistence.Table(name = "EXPERIMENT_VIEW")
public class ExperimentViewEntity {
...many fields...
@Column(name = "EXPERIMENT_ID", nullable = false, insertable = true, updatable = true, length = 36)
private String experimentId;
...
}
答案 0 :(得分:0)
我认为在与DatapointView对象进行交互时,您没有仍处于打开状态的事务。渴望获取可能不是解决方案。此外,hibernate文档说你不应该这样做,请参阅OneToMany的文档 - &gt; http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association
如果您希望该列表中包含大量数据,则应考虑将关系移至ExperimentViewEntity(单向)。并在需要时查询ExperimentViewEntities。这也允许进行分页,这在性能方面可能是必要的。