1

私のSpring MVCプロジェクトでは、Hibernateを使用しており、Criteria APIを使用して、Group BYおよびOrde​​r BY句を適用しています。クエリはDBで正常に実行され、結果も得られますが、オブジェクトの配列です--

これがCriteria APIのコードです

Criteria criteria = session.createCriteria(DashboardSubindicatorSubmission.class, "DashboardSubindicatorSubmission")
                .setProjection(Projections.projectionList()
                        .add(Projections.sum("InputValue").as("InputValue"))
                        .add(Projections.groupProperty("fkAccademicYearId"))
                        .add(Projections.groupProperty("fkAssessmentPlanID"))
                        .add(Projections.groupProperty("fkSubindicatorID"))
                        .add(Projections.groupProperty("InputTitle")))
                .addOrder(Order.asc("fkAccademicYearId"))
                .addOrder(Order.asc("fkAssessmentPlanID"))
                .addOrder(Order.asc("InputTitle"));
        List<DashboardSubindicatorSubmission> dashboardSubindicatorSubmissionList = (List<DashboardSubindicatorSubmission>)criteria.list();
        session.flush();
        transaction.commit();
        return dashboardSubindicatorSubmissionList;

にキャストcriteria.list()していますが、コントローラーでList<DashboardSubindicatorSubmission>実行しようとすると例外が発生します。dashboardSubindicatorSubmissionList.get(i)java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to mkcl.accreditation.model.DashboardSubindicatorSubmission

List<DashboardSubindicatorSubmission>私はそれを知っていますが、まだそのリストにキャストしていますが、それが私にオブジェクトを返すので、私object[]ができない理由です。(間違っていたら訂正してください)dashboardSubindicatorSubmissionList.get(i)DashboardSubindicatorSubmission

DashboardSubindicatorSubmissionでは、どうすれば結果をクラスのリストに変換できますか? この場合、 setResultTransformer() は役に立ちますか?

4

1 に答える 1

0

2 つのオプションがあります。プロジェクションを使用する場合、Hibernate は各フィールドの名前を使用してオブジェクトを構築するため、各フィールドを尊重する方法を知りませんが、名前はまだわかりません。

したがって、最初のオプションは、グループ化されたフィールドに名前を付けて、オブジェクト プロパティの名前と一致するようにすることです。これは、射影で使用する文字列が既にオブジェクト フィールドの名前である場合でも必要です。何かのようなもの:

.add(Projections.groupProperty("fkAccademicYearId"), "fkAccademicYearId") // same value
.add(Projections.groupProperty("fkAssessmentPlanID"), "other") // other value

2番目のオプションは、あなた自身が提案したことを実行し、ResultTransformer の独自の実装を作成することです。レポートを作成するときなど、このクエリの他のオブジェクトを抽出したい場合、これは興味深いオプションだと思います。

于 2013-03-21T18:12:27.097 に答える