Spring JPAでQueryDSLを使用して簡単に実装することをお勧めします。
QueryDSLを使用すると、簡単に述語を作成して(条件を除く)問合せで使用できます。あなたの場合、それはおそらく以下のようなものでしょう。 Spring Data JPAでQueryDSLを使用する方法については、Spring Data JPA Tutorial: Creating Database Queries With Querydslのリンクを参照してください。与えられた条件のために、あなたのケースで
、
find by (originalId1 AND originalCalendarId1) OR (originalId2 AND originalCalendarId2) OR (originalId..N AND originalCalendarId..N) OR
例えばあれば、私は理解していませんでしたoriginalId1/originalCalendarId1は任意の値と等しくなければなりません。簡潔さと説明のためにとしましょう。、それらはある値と等しくなければなりません。
import com.mysema.query.BooleanBuilder;
import com.mysema.query.types.Predicate;
public class EventPredicates {
public static Predicate getAllEventsByOrginalIds(String[] originalIds, String[] originalCalendarIds) {
QEvent event = QEventEntity.event;
BooleanBuilder builder = new BooleanBuilder();
//assuming both arrays are of same size.
for (int idx = 0; idx < originalIds.length; idx++) {
builder.or(event.originalIds[0].eq.(someValue)).and(event.originalCalendarIds[0].eq.(someCalValue));
}
return builder;
}
}
ただし、QueryDSL機能を使用するには、リポジトリインターフェイスをQueryDslPredicateExecutor<Event>
に拡張する必要があります。あなたのサービスの方法で
、あなたが作ることができるEventRepositoryを想定して、以下のような呼び出しの何かが以下のように宣言されます。
@Autowired
EventRepository eventRepository;
public void someMethod(){
...
List<Events> events = eventRepository.findAll(EventPredicates.getAllEventsByOrginalIds(originalIdsArr, originalCalendarIdsArr));
...
}
ところで、QueryDSLは(複雑にシンプルな)異なる基準を実装することが非常に容易になります。それを使用する方法については上記のリンクを参照してください。
これが役に立ちます。
'findByOriginalIdInOrOriginalIdInOrOriginalIdIn(...)'を試してみましたか?正直言って、私は、crietria apiがはるかにシンプルで使いやすくなると思っています。 – Antoniossss
[this](https://stackoverflow.com/questions/43780226/spring-data-ignore-parameter-if-it- has-a-null-value/43781418#43781418)質問 –