

検索バーに名前を打ち込んでテーブル内のデータをviewへ表示させたいのですがうまくいきません。

例）「た」と打ち込んで「たなか」「たむら」をヒットさせる

createNamedQueryのsetParameterメソッドを利用して引数を動的に取得するようにしていますが  
複数のレコードを取得できない状態です。

例）「た」と打ち込むと「Operand should contain 1 column(s)」とのエラーが表示される。

あいまい検索で複数のレコードを取得するにはどのようにすればよろしいでしょうか。

クエリ文

[code]

    query = "SELECT r FROM Report AS r WHERE r.employee = :employee"
    query = "SELECT e FROM Employee AS e WHERE e.name LIKE :name"
    
[/code]

コントローラ

[code]

     String employee_name = request.getParameter("search");
    
            //クエリの結果を変数へ格納、該当する名前のレコードを取得
            try{List<Employee> employee_search = em.createNamedQuery("getEmployeesName" , Employee.class)
                    .setParameter("name",employee_name + "%" )
                    .getResultList();
    
            System.out.println(employee_search);
    
            //レポートテーブル内データ取得
            List<Report> r_employee_id = em.createNamedQuery("getCreateUser" , Report.class)
                    .setParameter("employee", employee_search)
                    .getResultList();
            em.close();
    
[/code]


CC BY-SA 4.0
2019-09-23T09:13:21.267
59219
2019-09-24T00:05:02.150
2019-09-24T00:05:02.150
3060
35624
question
java jpa
jpa検索機能作成


ぱっと見での回答になりますが、1つ目のSQL（`getEmployeesName`）で複数件のレコードが取得できるのに対し、それらのレコードを検索条件にする2つ目のSQL（`getCreateUser`）は1件しか想定していないWHERE句（`=`での比較）になっています。そのため、

[code]

    query = "SELECT r FROM Report AS r WHERE r.employee = :employee"
    
[/code]

は、

[code]

    query = "SELECT r FROM Report AS r WHERE r.employee IN :employee"
    
[/code]

のようにしなければ、動作しないと思います。


CC BY-SA 4.0
2019-09-23T12:16:41.887
59222
2019-09-23T20:13:12.190
2019-09-23T20:13:12.190
21092
21092
59219
answer