Hibernate Criteria.list() 一个非常简单的查询需要很长时间

Hibernate Criteria.list() takes a very long time for a very simple query

我正在关注的一个应用程序有这段代码,它的执行时间约为 20,000 毫秒。这确实妨碍了网站的性能。这是因为 Criteria.list 吗?这是导致速度缓慢的代码。我有一个示例数据库 table,我试图在其中检索 table 中的所有值。我怎样才能提高这个查询的性能?我正在使用 SQL 服务器作为我的数据库。

public Map<Integer, Sample> getAllSamples() {
    Map<Integer, Sample> Sample = transactionTemplate
            .execute(new TransactionCallback<Map<Integer, Sample>>() {
                @Override
                public Map<Integer, Sample> doInTransaction(TransactionStatus arg0) {
                    Criteria criteria = hibernateTemplate
                            .getSessionFactory().getCurrentSession()
                            .createCriteria(Sample.class);
                    criteria.add(Restrictions.isNull("deleted"));
                    @SuppressWarnings("unchecked")
                    List<Sample> Samples = (List<Sample>) criteria.list();
                    HashMap<Integer, Sample> mSamples = new HashMap<Integer, Sample>();
                    for (Sample sample: Samples){
                        if (sample != null && sample.getsampleId() != null){
                            //hibernateTemplate.initialize(sample);
                            mSamples.put(sample.getsampleId(), sample);
                            hibernateTemplate.initialize(sample.getsampleCountry());
                        }
                    }
                    return mSamples;
                }
            });
    return Sample;
}

现在,我的示例 class 还有另外两个 class 称为帐户和存款。 Sample和另外两个是一对一的关系。但是,fetchType 是惰性的。这是示例 class、

中的代码
@OneToOne(fetch = FetchType.LAZY, mappedBy = "sample", cascade = CascadeType.ALL)
public deposit getDeposit() {
    return this.deposit;
}

我检查了日志,对于 Sample 中的每一行,在 Deposit 中生成了一个查询。我如何确保不是这种情况?由于 Sample 中大约有 400 行;对于检索存款,有 400 个查询 运行。这很奇怪。我不确定在这里可以做些什么来提高性能。任何指针都会有很大的帮助。

提前致谢。

这就是我所做的。我使关联成为强制性的(可选 = false),它相信对于每个样本记录,都会有一个存款记录。因此,在加载 Sample 时,Hibernate 也不会加载 Deposit table。

这是底层代码,

    @OneToOne(optional = false, fetch = FetchType.LAZY, mappedBy = "sample",         cascade = CascadeType.ALL)
    public deposit getDeposit() {
        return this.deposit;
    }