Ich würde vorschlagen, QueryDSL mit Spring JPA zu verwenden, um Ihre Implementierung auf einfache Weise zu machen.
Mit QueryDSL können Sie leicht Ihr Prädikat (nichts als die Kriterien) erstellen und in der Abfrage verwenden. In Ihrem Fall wäre es wahrscheinlich so etwas wie unten. Bitte beachten Sie den Link: Spring Data JPA Tutorial: Creating Database Queries With Querydsl zur Verwendung von QueryDSL mit Spring Data JPA.
In Ihrem Fall für bestimmte Bedingung,
find by (originalId1 AND originalCalendarId1) OR (originalId2 AND originalCalendarId2) OR (originalId..N AND originalCalendarId..N) OR
Ich verstand nicht, wenn z.B. originalId1/originalCalendarId1 sollte einem beliebigen Wert entsprechen. Nehmen wir an, aus Gründen der Einfachheit und Erklärung, sie sind gleich zu einem Wert.
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;
}
}
Allerdings sollten Ihre Repository-Schnittstelle QueryDslPredicateExecutor<Event>
erweitern Nutzung der QueryDSL Funktionalität zu machen.
In Ihrer Service-Methode, können Sie den Anruf so etwas wie machen unter EventRepository unter der Annahme, wie weiter unten erklärt wird:
@Autowired
EventRepository eventRepository;
public void someMethod(){
...
List<Events> events = eventRepository.findAll(EventPredicates.getAllEventsByOrginalIds(originalIdsArr, originalCalendarIdsArr));
...
}
Btw, QueryDSL macht es sehr einfach, verschiedene Kriterien (einfach bis komplex) zu implementieren. Lesen Sie den obigen Link zur Verwendung.
Hoffe, das hilft.
haben Sie versucht 'findByOriginalIdInOrOriginalIdInOrOriginalIdIn (...)' ?? aber um ehrlich zu sein, ich denke, dass crietria api wäre viel einfacher und direkt zu verwenden – Antoniossss
Check out [this] (https://stackoverflow.com/questions/43780226/spring-data-ignore-parameter-if-it-it- has-a-null-Wert/43781418 # 43781418) Frage –