以下のように定義された postgres 関数があります。
Schema | public
Name | getallocationmap_global
Result data type | refcursor
Argument data types | OUT v_set refcursor, integer, integer, bigint, integer,
smallint, character varying, bigint, bigint, bigint, bigint,
bigint, bigint, bigint, integer, bigint, double precision,
double precision, bigint, double precision, smallint, double
precision, integer, integer, integer, character varying, integer
Type | normal
現在、hibernate の名前付きクエリを介して Web アプリケーションでこの関数を使用しています。名前付きクエリは次のように定義されます。
<sql-query name="selectAllocationMapByNw_SP" callable="true">
<return alias="alloc" class="com.zedo.data.dto.AllocationMap">
<return-property name="id" column="id" />
<return-property name="channelCode" column="channel_code" />
<return-property name="creativeId" column="creative_id" />
<return-property name="priority" column="priority" />
<return-property name="status" column="status" />
<return-property name="impressionsAllocated"
column="impressions_allocated" />
<return-property name="impressionsDelivered"
column="impressions_delivered" />
<return-property name="clicksAllocated" column="clicks_allocated" />
<return-property name="clicksDelivered" column="clicks_delivered" />
<return-property name="actionsAllocated" column="actions_allocated" />
<return-property name="actionsDelivered" column="actions_delivered" />
<return-property name="piactionsDelivered" column="piactions_delivered" />
<return-property name="timezoneId" column="timezone_id" />
<return-property name="allocateByDay" column="allocate_by_day" />
<return-property name="ecpm" column="ecpm" />
<return-property name="earnedTotal" column="earned_total" />
<return-property name="vactionsDelivered" column="vactions_delivered" />
<return-property name="vearnedTotal" column="vearned_total" />
<return-property name="level" column="level" />
<return-property name="weight" column="weight" />
<return-property name="cap" column="cap" />
<return-property name="durationType" column="duration_type" />
<return-property name="duration" column="duration" />
<return-property name="capStatus" column="cap_status" />
<return-property name="code" column="code" />
</return>
{ ?=call getallocationmap_global(:nwId, :id, :channelCode, :creativeId,
:priority, :status, :impressionsAllocated, :impressionsDelivered,
:clicksAllocated, :clicksDelivered, :actionsAllocated, :actionsDelivered,
:piactionsDelivered, :timezoneId, :allocateByDay, :ecpm, :earnedTotal,
:vactionsDelivered, :vearnedTotal, :level, :weight, :cap, :durationType,
:duration, :capStatus, :code) }
</sql-query>
この名前付きクエリにアクセスする方法は次のとおりです。
Query query = getSession().getNamedQuery("selectAllocationMapByNw_SP");
getSession() は現在の休止状態のセッションを返します。
次に、使用可能なパラメーターをこのクエリに設定し、次の方法で実行します。
List retList = query.list();
このアプローチはほとんどの場合に機能しますが、実行中のアプリケーションのある時点で突然、次の例外がスローされ始めます。
[org.hibernate.util.JDBCExceptionReporter 280912:063129 WARN ] - SQL Error: 0, SQLState: 25P02
[org.hibernate.util.JDBCExceptionReporter 280912:063129 ERROR] - ERROR: current transaction is aborted, commands ignored until end of transaction block
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - : org.hibernate.exception.GenericJDBCException: could not execute query
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - SQLStateConverter.java::handledNonSpecificException() - 126
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - SQLStateConverter.java::convert() - 114
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - JDBCExceptionHelper.java::convert() - 66
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - Loader.java::doList() - 2231
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - Loader.java::listIgnoreQueryCache() - 2125
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - Loader.java::list() - 2120
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - CustomLoader.java::list() - 312
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - SessionImpl.java::listCustomQuery() - 1722
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - AbstractSessionImpl.java::list() - 165
[AllocationMapSQL 280912:063129 ERROR] - AllocationMapSQL::updateWithStatus() - - SQLQueryImpl.java::list() - 175
[AllocationMapSQL 280912:063129 ERROR] - ConcreteAllocationMapHibernateDAO::executeSearch() - 111
また、db ログに次のエラーが表示されます。
ERROR: function getallocationmap_global(unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown) does not exist at character 15
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
この関数に渡されるすべてのパラメーターと引数の型を確認しましたが、それらは一致しています。
PS - このアプリケーションでは、クラスパスに含まれる jar ファイルを介して休止状態の操作が実行されます。
以下に構成を示します。
OS - openSUSE 10.3 (X86-64) - カーネル \r (\l) Hibernate バージョン - 3.3.1-GA Postgres - 9.1.4 JDK - 1.6.0-22。Tomcat - apache-tomcat-7.0.8。JDBC Jar - postgresql-9.1-901.jdbc3.jar
考えられる原因を教えてください。前もって感謝します。