2017-04-26 127 views
1

我有类与多对一的关系。当我使用Criteria.list查询它们时,会填充惰性字段。懒惰的领域总是加载

public class SE { 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "mSe") 
    private List<RS> mRs; 
} 

public class RS { 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "my_join_id") 
    private SE mSe; 
} 

...

Criteria criteria = session.createCriteria(SE.class);  
List<SE> myObjects = criteria.list(); 

// SE objects have lazy list populated. why? 

我该如何防止被加载的懒领域?

+0

你怎么知道他们被填充?而且,当你运行'criteria.list()'时,查询是什么? –

+0

如果您运行查询,即获取数据,它们是否不应该被填充? – efekctive

+0

criertia如帖子所示。也许我误解了延迟加载。我认为这些字段不会被加载,除非我在事务还在发生时通过使用访问器来明确加载它们。我可以通过在trasnaction结束后查看调试器来加载惰性列表。 –

回答

0

你怎么知道它被填充?

如果你正在用你的调试器看,这是一个正常的行为,因为debuger做了很多东西,大部分时间调用getter来获得实例的字符串表示。由于getter被调用,延迟加载被触发。

你可以做什么以确保它真的是懒惰加载是删除您的@Transactional注释,并且当在调试器中访问SE时应该有错误。