0

ORMLiteを使用して、特定の基準に一致するデータベースアイテムの数をカウントしたいと思います。私のデータベースの簡略版は次のとおりです。

Employee Table:
 employeeId
 departmentId

Department Table:
 departmentId

Salary Table:
 employeeId
 payGrade

特定の給与等級にある部門のサブセットからの従業員の数を数えたいとします。次のようなことを試してみると、1つの選択列のみが許可されているという例外が報告されます。

salaryQB.selectColumns(salaryQB.EMPLOYEE_ID);
salaryQB.where().eq(salaryQB.PAY_GRADE, 12);
employeeQB.where.in(Employee.DEPARTMENT_ID, departmentList)
      .and().in(employeeQB.EMPLOYEE_ID, salaryQB);

employeeQB.setCountOf(true);
count = dao.countOf(employeeQB.prepare());

しかし、このようなコードは次のエラーを返します。

RuntimeException(java.sql.SQLException:内部クエリには2つではなく1つの選択列のみを指定する必要があります)

生のSQLクエリを書く以外にこれを行う方法はありますか?

4

1 に答える 1

2

うーん。コード@Jeffに問題はありません。ORMLiteの例外メッセージを改善して、将来の実際のフィールド名を表示するようにしましたが、現時点では役に立ちません。

内部クエリには、2ではなく1つの選択列のみを指定する必要があります:[id、foreign]

メッセージは[明らかに]内部selectColumns(...)に複数を指定したことを伝えようとしています。ただし、ここでは1つの列のみを選択しているようです。salaryQBQueryBuilder

salaryQB.selectColumns(salaryQB.EMPLOYEE_ID);

がどこで定義されているかわかりませんが、salaryQB他の場所にも使用しているコードがあるのではないでしょselectColumnsうか。単体テストtestInnerCountOf()の下部にあるメソッドのエラーを再現しようとしましたが、正常に機能しているようです。QueryBuilderTest

これを単体テストで再現できる場合、または単体テストが構成とどのように異なるかを確認できる場合は、お知らせください。

編集:

バージョン4.22(2012年9月以降)以降、ORMLiteは単純なJOINステートメントをサポートするようになりました。したがって、クエリは次のように簡略化できます。

salaryQB.where().eq(salaryQB.PAY_GRADE, 12);
employeeQB.join(salaryQB);
employeeQB.where().in(Employee.DEPARTMENT_ID, departmentList);
employeeQB.setCountOf(true);
count = dao.countOf(employeeQB.prepare());
于 2012-06-12T16:13:47.500 に答える