2015-05-07 26 views
0

我有使用JPA 2.0和Hibernate作为持久性提供程序的应用程序。我正在使用EntityManager来构建我的查询。HibernateException:集合与更大结果集的任何会话没有关联

我在大数据集上遇到了经典的org.hibernate.HibernateException: collection is not associated with any session错误。当我试图提取几个数据点时,它正常工作,但是一旦我提取了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

我想你没有一个仍然打开交易时与DatapointView对象交互。渴望提取可能不是解决方案。另外休眠文档说你不应该这样做,请参阅OneToMany的文档 - >http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association

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

相关问题