【问题标题】:HibernateException: collection is not associated with any session for bigger result setHibernateException:集合与更大结果集的任何会话无关
【发布时间】:2015-05-09 14:47:09
【问题描述】:

我的应用程序使用 JPA 2.0 和 Hibernate 作为持久性提供程序。我正在使用 EntityManager 来构建我的查询。

我在大数据集上遇到了经典的org.hibernate.HibernateException: collection is not associated with any session 错误。当我尝试仅提取几个数据点时,它工作正常,但是一旦我提取 30 多个结果,我就会收到 org.hibernate.HibernateException: collection is not associated with any session 错误。我想我不应该得到它,因为我使用的是fetch = FetchType.EAGER

任何帮助将不胜感激!

这是我的两个实体。 数据点视图:

@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;
   ...
}

【问题讨论】:

    标签: java hibernate session jpa


    【解决方案1】:

    我认为您在与 DatapointView 对象交互时没有仍然打开的事务。 Eager Fetching 可能不是解决这个问题的方法。此外,休眠文档说您不应该这样做,请参阅 OneToMany 的文档 -> http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association

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

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 2012-06-11
      • 2018-09-16
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多