Метод запроса по примеру
Я думаю, что лучшим вариантом для вас является использование (imo, довольно редко используется) QueryByExample
функции Spring Data JPA. Исследуя этот ответ, я разместил ответ где-то еще , который нуждался в таком же ответе. Я бы взглянул на это, чтобы понять, как это решает вашу проблему.
Сначала вам нужно будет QueryByExampleExecutor
на Repository
.
Во-вторых, вам просто нужно создать свой запрос следующим образом (и, надеюсь, вы используете беглых компоновщиков для ваших сущностей!):
ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<MyObject> exampleQuery = Example.of(new MyObject()
.withEntity1(new Entity1().withName("foo"), matcher);
repository.findAll(exampleQuery);
Выберет все элементы MyObject
с Entity1
, имеющие name
из foo
.
ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<MyObject> exampleQuery = Example.of(new MyObject()
.withEntity1(new Entity1().withName("foo"),
.withEntity2(new Entity2().withName("bar"),
.withEntity3(new Entity3().withName("baz"),
.withEntity4(new Entity4().withName("foo"),
.withEntity5(new Entity5().withName("bar"),
.withEntity6(new Entity6().withName("baz"),
.withEntity7(new Entity7().withName("foo")
), matcher);
repository.findAll(exampleQuery);
Выберет все элементы MyObject
для Entity1
с name
из foo
, Entity2
, с name
из bar
и т. Д.