EclipseLink Native API无法与SQLserver一起使用

时间:2012-03-22 12:35:09

标签: java sql-server spring eclipselink

在我们的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

以下是用于连接SQLserver的Session.xml内容

<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 个答案:

答案 0 :(得分:2)

堆栈跟踪会有所帮助,但是,存储过程非常适合数据库。

  

call.useNamedCursorOutputAsResultSet( “RCT1”);

这在SQL Server上没有意义,因为它没有游标输出参数,我假设您的存储过程定义在SQL Server上非常不同,因此您需要一个不同的调用。 SQL Server可以从存储过程返回结果集,因此可能只是删除了被删除的。

还要确保存储过程存在于数据库中。