Выберите оператором «IN» со списком объектов с 2 полями - PullRequest
2 голосов
/ 20 января 2020

Я хотел бы знать, если есть возможность сделать выборку с JDBCTemplate, используя setParameter для List<CaseW>/Set<CaseW>, где CaseW имеет 2 поля с длинным типом?

У меня есть таблица, которую нужно выбрать как что:

SELECT * 
FROM assertions 
WHERE (a_id, b_id) in ( (1, 15), (4, 16), (2, 13) )

и из моего Java кода я хотел бы сделать что-то подобное:

public class CaseW{
  private long a_id;
  private long b_id;

  // Constructors, getters, setters, hash codes etc.
}

public List<MyResult> getData() {
  Set<CaseW> caseW = new HashSet<CaseW>;
  caseW.add(new CaseW(1,15));
  caseW.add(new CaseW(4,16));
  caseW.add(new CaseW(1,13));

  String sql = "SELECT * " +
               "FROM assertions " +
               "WHERE (a_id, b_id) IN (:caseList) ";

  return sqlManager.createQuery(sql, MyResult.class)
                   .setParameter("caseList", caseW)
                   .getResultList();
}

Так что в принципе мне интересно, возможно ли сделать что-то подобное или мне нужно выполнить foreach поверх строк Set и concat, чтобы подготовить SQL к этому выражению "IN"?

Буду очень признателен за любые предложения по решению этой проблемы.

1 Ответ

0 голосов
/ 20 января 2020

Если предложение может принимать только одно условие, вы можете добавить несколько, где, используя И

Например,

where a_id in(:caseList.getA()) -- getA() implies all values in caseList.a

И

b_id in(:caseList.getB()) -- getB() implies all values in caseList.b
...