HibernateException:集合与更大结果集的任何会话无关

时间:2015-05-07 21:41:58

标签: java hibernate session jpa

我有使用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;
   ...
}

1 个答案:

答案 0 :(得分:0)

我认为在与DatapointView对象进行交互时,您没有仍处于打开状态的事务。渴望获取可能不是解决方案。此外,hibernate文档说你不应该这样做,请参阅OneToMany的文档 - &gt; http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association

如果您希望该列表中包含大量数据,则应考虑将关系移至ExperimentViewEntity(单向)。并在需要时查询ExperimentViewEntities。这也允许进行分页,这在性能方面可能是必要的。