1
我編程構建我的SQL查詢string和希望執行它作爲一個SQL語句,但我使用Spring數據JPA,我不能夠使用JDBC預處理語句。這在JPA中可能嗎?如何使用Spring Data JPA執行存儲爲字符串的查詢?
public class Polygon {
public static void main(String[] args) {
// Build Lat/Longs
Set<String[]> coordinates = new HashSet<>();
coordinates.add(new String[]{"42", "-72.95333862304689"});
coordinates.add(new String[]{"42.05337156043361", "-71.06643676757814"});
coordinates.add(new String[]{"41.32732632036624", "-71.06643676757814"});
coordinates.add(new String[]{"41.32732632036624", "-72.95333862304689"});
coordinates.add(new String[]{"42.05337156043361", "-72"});
// Trim & Build Query
String query = "SELECT * FROM SITE WHERE (LATITUDE LIKE ";
for(String[] c : coordinates){
c[0] += ".0";
c[1] += ".0";
String[] latArray = c[0].split("\\.");
String[] lngArray = c[1].split("\\.");
String lat = latArray[0] + "." + latArray[1].substring(0, 1) + "%";
String lng = lngArray[0] + "." + lngArray[1].substring(0, 1) + "%";
query += lat + " AND LONGITUDE LIKE " + lng + ") OR (LATITUDE LIKE ";
}
query = query.substring(0, query.length() - 20) + ");";
System.err.println(query);
/*
* This is the Query I am printing, which is correct
*
* SELECT * FROM SITE
* WHERE (LATITUDE LIKE 41.3% AND LONGITUDE LIKE -71.0%)
* OR (LATITUDE LIKE 42.0% AND LONGITUDE LIKE -72.0%)
* OR (LATITUDE LIKE 42.0% AND LONGITUDE LIKE -72.9%)
* OR (LATITUDE LIKE 42.0% AND LONGITUDE LIKE -71.0%)
* OR (LATITUDE LIKE 41.3% AND LONGITUDE LIKE -72.9%);
*
* How to execute this with Spring Data JPA?
*/
// @Query("SELECT * FROM SITE :where", nativeQuery = true)
// public List<SiteDTO> executeSiteQuery(@Param("where") String where);
// Doesn't Work, because (Syntax error on token ""SELECT * FROM SITE :where"", invalid MemberValuePairs)
}
}
我能拿到的EntityManager而使用Spring的引導,因爲我們沒有這個配置在所有。它全部由Spring抽象和處理。 – jDub9
@ jDub9這是春天啓動的最好的部分,你可以得到元素創建和框架的自動配置,然後用它們在你的自定義類,如果你想。 –