2017-07-22 55 views
0

我有多個下拉選擇框可供選擇流派列表。我在JavaScript中創建了一個JSON數組,其中用戶&選擇的所有流派都將它們傳遞給繪圖圖表的後端Java函數。如何將Json數組傳遞給JPQL Where運算符的子句?

Database : MySQL 

的JavaScript:

var items = {}; 

    $(function() { 
     $('#genres1').change(function() { 
      console.log($(this).val()); 
      items.genres = $(this).val(); 
     }).multipleSelect({ 
      width: '56%' 
     }); 
    }); 

    var genres = items.genres.map(function(e){ 
       return JSON.stringify(e); 
      }); 
     var selectedGenres = genres.join(", "); 
     alert(selectedGenres); // Outputs : "Action", "Horror" and so on.... based on selection 

的Java:

public static void myFun(String genre){ 
      Logger.info("Genre"+genre); //prints "Action","Horror" 
      List<String> selectedGenres = Arrays.asList(genre); 
      //List<String> selectedGenres = Arrays.asList("Action","Horror"); //Correct output 
      Logger.info("Genre"+selectedGenres); //prints ["Action","Horror"] 
      String queryString="SELECT wD FROM sed WHERE genre IN (:genres)"; 
      Query query1=JPA.em().createNativeQuery(queryString).setParameter("genres", selectedGenres); 
} 

我不知道該如何數組必須要傳遞給查詢。

//List<String> selectedGenres = Arrays.asList("Action","Horror"); //Correct output 

這個硬編碼值給了我正確的輸出。當我通過「selectedGenres」數組包含完全相同的輸入 - "Action","Horror"我沒有得到首選輸出。我也嘗試發送「流派」,因爲它是一個參數,但它不起作用。我得到空的答覆。有人能糾正我在哪裏出錯嗎?

回答

1
List<String> selectedGenres = Arrays.asList(genre); 

一些API澄清:Arrays#asList接受String... vargs,其中每一個參數是一個元素值,以創建實際的名單。

回到你的方法:你的輸入參數爲String genre一個String),而#asList方法是不知道這個genre字符串實際上是一個數組(也不應該),並正確地完成它的工作 - 在接收單個元素(在我們的情況下爲String),則創建一維List

爲了解決這個問題,你可能想嘗試的其中一個選項:

  1. (如果你的字符串是JSON數組)使用JSON解析庫(如Jackson
  2. 嘗試拆分輸入(genre),並將該數組轉換回List。
+0

我會試試這個。感謝您的意見@Michael Arenzon – Venky