Spring Data JDBC @Query с несколькими столбцами INJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Data JDBC @Query с несколькими столбцами IN

Сообщение Anonymous »

Имеется следующее определение сущности:

Код: Выделить всё

public class FooBar{
@Id
private long id;
private Long fooNumber;
private Long barNumber;
...
//Other inconsequential properties
}
Я хотел бы выполнить следующий запрос:

Код: Выделить всё

SELECT * FROM foo_bar WHERE (foo_number, bar_number) IN ((1,2),(1,4),(99,45))
Однако мне бы хотелось, чтобы предложение IN принимало произвольный список кортежей, описывающих параметры WHERE. Примерно так:

Код: Выделить всё

SELECT * FROM foo_bar WHERE (fooNumber, barNumber) IN :List(FooBarTuple)
Я пытался реализовать это, используя что-то вроде:

Код: Выделить всё

@Repository
public interface FooBarRepository extends CrudRepository {

@Query("SELECT id, foo_number, bar_number FROM foo_bar WHERE (foo_number, bar_number) IN :fooBarList;")
List findFooBarIn(@Param("fooBarList") List fooBarList);
}

public class FooBarTuple {
private Long fooNumber;
private Long barNumber;
}

@Service
public class FooBarService {
//Repository inject, other methods

public List getFooBar(List fooBarTupleList) {
return fooBarRepository.findFooBarIn(fooBarTupleList);
}
}
Когда я пытаюсь это сделать, я неожиданно получаю исключение, потому что, как я предполагаю, Spring Data JDBC не знает, как сопоставить класс FooBarTuple с предложением IN. Для полноты приведу пример исключения, которое я вижу:

Код: Выделить всё

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
Наконец, вот пример того, что, по словам Spring Boot, генерируется SD JDBC для приведенного выше запроса:

Код: Выделить всё

Executing prepared SQL statement [SELECT id, foo_number, bar_number FROM foo_bar WHERE (foo_number, bar_number) IN ?, ?, ?;]
Можно ли выполнить предложение IN с кортежем в Spring Data JDBC? Если да, может ли кто-нибудь предоставить мне пример?
PS: Обратите внимание, что это для Spring Data JDBC а не JPA.

Подробнее здесь: https://stackoverflow.com/questions/767 ... in-columns
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»