Hallo,
ich habe derzeit das folgende Problem, dass ich verschiedene Methoden gefühlt 100 mal habe.
Der einzigige Unterschied ist, dass ich als Rückgabewert eine andere Klasse zurückgebe.
Meine Methoden sind für Datenbankabfragen (JPA) erstellt. Hier gehe ich mit einer allgemeinen Liste als Paramater herein (List<ObjectForSearchList> searchList).
Dort werden dann Dinge gespeichert, die ich für die Datenbanbafrage benötige (WHERE Clause).
Hier mal ein Beispiel einer Methode:
Die ganzen Service Klassen möchte ich nicht löschen, die ich für die verschiedenen Entity - Typen habe (da auch @Transactional etc. verwendet wird).
Was ich aber verändern möchte ist, dass ich eine Methode habe, die mit einen "allgemeine Entity" als Rückgabewert liefert, sodass ich die Implementierung der Methode an einer zentralen Stelle habe.
Meine Frage ist nun, wie müsste diese Methode aussehen?
Ich habe mal etwas mit <T> gelesen, bin mir aber nicht sicher, ob das hier zutrifft?
Also sowas dann wie:
Danke für jede Hilfe
ich habe derzeit das folgende Problem, dass ich verschiedene Methoden gefühlt 100 mal habe.
Der einzigige Unterschied ist, dass ich als Rückgabewert eine andere Klasse zurückgebe.
Meine Methoden sind für Datenbankabfragen (JPA) erstellt. Hier gehe ich mit einer allgemeinen Liste als Paramater herein (List<ObjectForSearchList> searchList).
Dort werden dann Dinge gespeichert, die ich für die Datenbanbafrage benötige (WHERE Clause).
Hier mal ein Beispiel einer Methode:
Java:
public List<MyEntity> findAllMyEntityListByQueryAndNumberOfResult(
List<ObjectForSearchList> searchList, int numberOfResult) {
LOGGER.info("START findAllMyEntityListByQuery");
List<MyEntity> list = null;
try {
StringBuilder query = new StringBuilder("SELECT m FROM MyEntity m");
StringBuilder orderBy = new StringBuilder(" ORDER BY m.createDate DESC");
// WHERE Clause
JpaQueryBuilderHelper jpaQueryBuilderHelper = createQuery(searchList);
query.append((jpaQueryBuilderHelper == null ? "" : jpaQueryBuilderHelper.getSqlString()));
query.append((orderBy == null ? "" : orderBy));
String theQuery = query.toString();
LOGGER.info("QUERY: " + theQuery);
Query q = entityManager.createQuery(theQuery);
q = JpaQueryBuilderHelper.createJpaQuery(q, jpaQueryBuilderHelper.getJpaQueryBuilderList());
q.setMaxResults(numberOfResult);
list = q.getResultList();
} catch (NoResultException e) {
return null;
} catch (Exception e) {
LOGGER.error(ExceptionUtils.getFullStackTrace(e));
}
LOGGER.info("END findAllMyEntityListByQuery");
return list;
}
Die ganzen Service Klassen möchte ich nicht löschen, die ich für die verschiedenen Entity - Typen habe (da auch @Transactional etc. verwendet wird).
Was ich aber verändern möchte ist, dass ich eine Methode habe, die mit einen "allgemeine Entity" als Rückgabewert liefert, sodass ich die Implementierung der Methode an einer zentralen Stelle habe.
Meine Frage ist nun, wie müsste diese Methode aussehen?
Ich habe mal etwas mit <T> gelesen, bin mir aber nicht sicher, ob das hier zutrifft?
Also sowas dann wie:
Code:
public List<T> findAllMyEntityListByQueryAndNumberOfResult(
List<ObjectForSearchList> searchList, int numberOfResult) {
....
return t;
}
Danke für jede Hilfe