これは、過去のquestionのものに関連しています。無効な列型〜送信ArrayList <String>をpl/sql createdNameQueryに
私はList<Employee>
を受信し、Employee
オブジェクトからIDをつかみ、その後、createdNameQuery
のパラメータとしてArrayList
ことを送るArrayList<String>
でそれらを入れています。無効な列型SQL例外が表示されます。私はpl/sql開発者でクエリをテストし、フィールドを返しました。私は各IDの間に昏睡状態を置き、それを送信することによってIDの文字列を構築しようとしましたが、その試みから例外がありました。クエリの設定が間違っているか、データを間違って送信しているのが不思議です。私のリポジトリ内
機能:
public List<RequestByRequester> getRequestsByRequesters(
List<Employee> employeeList)
throws NoDataFoundException {
List<String> idList = new ArrayList<String>();
for(Employee emp : employeeList) {
idList.add(emp.getId().toString());
}
log.debug("Input params[requesters=" + idList + "]");
List<RequestByRequester> resultList = getEm().createNamedQuery(
"requestByRequestor.getRequestsByRequesters", RequestByRequester.class)
.setParameter(1,idList)
.getResultList();
if(resultList == null || resultList.size() <= 0)
throw new NoDataFoundException("No requests found by requesters.");
else
return resultList;
}
私の名前付きクエリrequestByRequestor.getRequestsByRequesters以下:
@NamedNativeQuery(
name = "requestByRequestor.getRequestsByRequesters",
resultClass = RequestByRequester.class,
query = "SELECT EMP.EMPL_FIRST_NAME || ' ' || EMP.EMPL_LAST_NAME REQUESTER," +
" R.RQST_ID RQST_ID," +
" R.TITLE TITLE," +
" R.DESCRIPTION DESCRIPTION," +
" DECODE(R.RESOLUTION_DATE, NULL, 'Open', 'Closed') STATUS" +
" FROM TARTS.REQUESTS R, SYS_EMPLOYEES EMP" +
" WHERE R.EMPL_ID_REQUESTED_BY = EMP.EMPL_ID" +
" AND EMP.EMPL_ID IN (?)" +
" ORDER BY 1, 5 DESC, 2"
)
EDIT:要求されたような例外を追加します。
この例外私はクエリで:ids
を使用します。
Internal Exception: java.sql.SQLException: Missing IN or OUT parameter at index:: 1 Error Code: 17041 Call: SELECT EMP.EMPL_FIRST_NAME || ' ' || EMP.EMPL_LAST_NAME REQUESTER, R.RQST_ID RQST_ID, R.TITLE TITLE, R.DESCRIPTION DESCRIPTION, DECODE(R.RESOLUTION_DATE, NULL, 'Open', 'Closed') STATUS FROM TARTS.REQUESTS R, SYS_EMPLOYEES EMP WHERE R.EMPL_ID_REQUESTED_BY = EMP.EMPL_ID AND EMP.EMPL_ID IN :ids ORDER BY 1, 5 DESC, 2 Query: ReadAllQuery(name="requestByRequestor.getRequestsByRequesters" referenceClass=RequestByRequester sql="SELECT EMP.EMPL_FIRST_NAME || ' ' || EMP.EMPL_LAST_NAME REQUESTER, R.RQST_ID RQST_ID, R.TITLE TITLE, R.DESCRIPTION DESCRIPTION, DECODE(R.RESOLUTION_DATE, NULL, 'Open', 'Closed') STATUS FROM TARTS.REQUESTS R, SYS_EMPLOYEES EMP WHERE R.EMPL_ID_REQUESTED_BY = EMP.EMPL_ID AND EMP.EMPL_ID IN :ids ORDER BY 1, 5 DESC, 2")
例外私は、クエリに?1
または(?)
を使用します。
Internal Exception: java.sql.SQLException: Invalid column type Error Code: 17004 Call: SELECT EMP.EMPL_FIRST_NAME || ' ' || EMP.EMPL_LAST_NAME REQUESTER, R.RQST_ID RQST_ID, R.TITLE TITLE, R.DESCRIPTION DESCRIPTION, DECODE(R.RESOLUTION_DATE, NULL, 'Open', 'Closed') STATUS FROM TARTS.REQUESTS R, SYS_EMPLOYEES EMP WHERE R.EMPL_ID_REQUESTED_BY = EMP.EMPL_ID AND EMP.EMPL_ID IN ? ORDER BY 1, 5 DESC, 2 bind => [[2192, 632]] Query: ReadAllQuery(name="requestByRequestor.getRequestsByRequesters" referenceClass=RequestByRequester sql="SELECT EMP.EMPL_FIRST_NAME || ' ' || EMP.EMPL_LAST_NAME REQUESTER, R.RQST_ID RQST_ID, R.TITLE TITLE, R.DESCRIPTION DESCRIPTION, DECODE(R.RESOLUTION_DATE, NULL, 'Open', 'Closed') STATUS FROM TARTS.REQUESTS R, SYS_EMPLOYEES EMP WHERE R.EMPL_ID_REQUESTED_BY = EMP.EMPL_ID AND EMP.EMPL_ID IN ? ORDER BY 1, 5 DESC, 2")
を意味することになっ用語BYそれらORDERは何ですか? result_variableではなく、state_field_path_expressionでもありません。 4.9 JPA仕様のセクションを読むことを提案する。結果の式を順序で使用する場合は、別名「SELECT something AS p」を使用し、次に「p」を参照することができます。代わりにこれをSQLとして指定した場合、クエリー生成に間違ったメソッドを使用しています – DataNucleus
名前付きクエリ定義を含める – James
@Jamesそれはテキストの下に含まれています** requestByRequestor.getRequestsByRequesters ** –