EclipseLink Native API не работает с SQLserver - PullRequest
0 голосов
/ 22 марта 2012

В нашем приложении Struts2-Spring мы используем следующие строки кода для доступа к процедуре

ServerSession serverSession = null;
ClientSession cSession = null;

            serverSession = (ServerSession) SessionManager.getManager().getSession("db_session"); 
            cSession =serverSession .acquireClientSession();

            StoredProcedureCall call = new StoredProcedureCall();
            call.setProcedureName("usp_list_dept_users");
            call.addNamedArgumentValue("p_user_id", user_id);
            call.useNamedCursorOutputAsResultSet("RCT1");
            List<DatabaseRecord> list = cSession.executeSelectingCall(call);
            ListIterator<DatabaseRecord> litr = list.listIterator();
--------------
-------------
-------------

Этот код работает для oracle db. Но тот же код не работает при подключении SQLserver DB

List<DatabaseRecord> list = cSession.executeSelectingCall(call);

бросков nullpointerexception

Ниже приведено содержимое Session.xml, используемое для подключения к SQLserver

<session xsi:type="server-session">
      <name>db_session</name>
      <event-listener-classes/>
      <logging xsi:type="toplink-log"/>

      <login xsi:type="database-login">
         <platform-class>org.eclipse.persistence.platform.database.SQLServerPlatform</platform-class>
         <user-name>sa</user-name>
         <password>testpwd</password>
         <sequencing>
            <default-sequence xsi:type="native-sequence">
               <name>Native</name>
            </default-sequence>
         </sequencing>
         <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
         <connection-url>jdbc:sqlserver://172.16.12.7:1433;databaseName=stdentlist</connection-url>
      </login>
      <connection-pools>
         <read-connection-pool>
            <name>ReadConnectionPool</name>
         </read-connection-pool>
         <write-connection-pool>
            <name>default</name>
         </write-connection-pool>
      </connection-pools>
      <connection-policy/>
   </session>

1 Ответ

2 голосов
/ 22 марта 2012

Трассировка стека может помочь, но хранимая процедура очень специфична для базы данных.

call.useNamedCursorOutputAsResultSet ( "RCT1");

Это не имеет смысла для SQL Server, поскольку он не имеет выходных параметров курсора, я предполагаю, что определение вашей хранимой процедуры сильно отличается на SQL Server, поэтому вам потребуется другой вызов. SQL Server может возвращать наборы результатов из хранимых процедур, поэтому, вероятно, просто удалите выделенный курсором.

Также убедитесь, что хранимая процедура существует в базе данных.

...