2017-04-19 52 views
0

我有一個春天啓動的應用程序版本1.4.3.RELEASE 是正在與MS SQL數據庫使用驅動程序版本4.1失敗春天啓動的查詢與MSSQL數據庫

我試圖執行一個查詢帶來的頂部100結果以下列方式

public interface EventTrackingService extends CrudRepository<EventTracking, Integer> { 

    public List<EventTracking> findBySwitchIpOrderByTimestampDesc(String switchIp); 

    public List<EventTracking> findTop100ByOrderByTimestampDesc(); 

} 

項目很好地編譯,但是當我打第二次查詢findTop100ByOrderByTimestampDesc我得到以下錯誤:

Hibernate: /* select generatedAlias0 from EventTracking as generatedAlias0 order by generatedAlias0.timestamp desc / select TOP ? eventtrack0_.nEventNumber as nEventNu1_9_, eventtrack0_.strAction as strActio2_9_, eventtrack0_.strEventMsg as strEvent3_9_, eventtrack0_.strEventType as strEvent4_9_, eventtrack0_.FHandleEvent as FHandleE5_9_, eventtrack0_.StrIpAddress as StrIpAdd6_9_, eventtrack0_.strMACAddress as strMACAd7_9_, eventtrack0_.nPort as nPort8_9_, eventtrack0_.strSwitchIP as strSwitc9_9_, eventtrack0_.nDate as nDate10_9_ from SWAT.dbo.tblEventsTracking eventtrack0_ order by eventtrack0_.nDate desc 2017-04-20 03:38:28.791 DEBUG 11016 --- [-nio-555-exec-3] c.m.s.jdbc.internals.SQLServerStatement : SQLServerPreparedStatement:3 created by (ConnectionID:10 ClientConnectionId: a144ec47-037d-40a7-be92-db1725614208) 2017-04-20 03:38:28.807 DEBUG 11016 --- [-nio-555-exec-3] c.m.s.jdbc.internals.SQLServerStatement : SQLServerPreparedStatement:3: calling sp_prepexec: PreparedHandle:0, SQL:/ select generatedAlias0 from EventTracking as generatedAlias0 order by generatedAlias0.timestamp desc */ select TOP @P0 eventtrack0_.nEventNumber as nEventNu1_9_, eventtrack0_.strAction as strActio2_9_, eventtrack0_.strEventMsg as strEvent3_9_, eventtrack0_.strEventType as strEvent4_9_, eventtrack0_.FHandleEvent as FHandleE5_9_, eventtrack0_.StrIpAddress as StrIpAdd6_9_, eventtrack0_.strMACAddress as strMACAd7_9_, eventtrack0_.nPort as nPort8_9_, eventtrack0_.strSwitchIP as strSwitc9_9_, eventtrack0_.nDate as nDate10_9_ from SWAT.dbo.tblEventsTracking eventtrack0_ order by eventtrack0_.nDate desc 2017-04-20 03:38:28.815 DEBUG 11016 --- [-nio-555-exec-3] c.m.s.jdbc.internals.SQLServerException : *** SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'. Msg 102, Level 15, State 1, Incorrect syntax near '@P0'. 2017-04-20 03:38:28.815 WARN 11016 --- [-nio-555-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 102, SQLState: S0001 2017-04-20 03:38:28.815 ERROR 11016 --- [-nio-555-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : Incorrect syntax near '@P0'.

這是一個錯誤的JPA與數據庫或

我用的參考從這裏 https://spring.io/blog/2014/10/15/whats-new-in-spring-data-evans#user-content-statically-limiting-results

+0

請同時發佈您的'EventTracking'類。 –

+1

在我看來,你不需要第一個'按',因爲沒有查詢參數。所以只要嘗試findTop100OrderByTimestampDesc –

+1

沒有第一個由項目不能編譯,找到解決方案在這裏http://stackoverflow.com/questions/20374437/jpa-query-creation-order-by – naoru

回答

0

FirstTop關鍵字不符合某些SQL實現踢好我的查詢是錯誤的,如果我記得沒錯,他們不適用於MySQL。我總是遇到這樣的問題,所以我現在就避開它們。最簡單的選擇是在請求中使用Pageable,並以此方式限制它。

所以這個:

public List<EventTracking> findTop100ByOrderByTimestampDesc();

會變成這樣:

public List<EventTracking> findAllByOrderByTimestampDesc(Pageable pageable);

,你會建立參數對象是這樣的:

Pageable pageable = new PageRequest(0, 100);

不一樣乾淨使用TopFirst,而是速戰速決繞過這不是把整個結果集到一個數組,取出他們的第一個「N」快SQL兼容性問題...

編輯:

此外,請檢查您的Spring Data JPA版本,它需要1.7或更高版本。如果這不起作用,那就是數據庫兼容性。