2017-07-22 5 views
0

複数のドロップダウン選択ボックスがあり、ジャンルのリストを選択できます。 JavaScriptでJSON配列を作成していて、ユーザが選択したすべてのジャンルを&としてグラフをプロットするバックエンドJava関数に渡しています。Json配列をJPQLに渡す方法IN演算子の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を受け付けます。戻るあなたの方法に

#asList方法は(といけない)このgenre文字列は、実際の配列であることを認識していない、そしてそれは正しくその仕事をしながら、あなたの入力引数は、(文字列String genreある - 受信したときに(ここではString)、一次元のListが作成されます。

問題を解決するには、これらのオプションのいずれかを試してみたいことがあります。

  1. が入力を分割するようにしてください(例えばJacksonなど)の使用JSONの解析ライブラリ(あなたの文字列がJSON配列の場合) (genre)をカンマで区切り、その配列をリストに変換し直します。
+0

これを試してみます。入力していただきありがとうございます@Michael Arenzon – Venky

関連する問題