Methode für jede beliebe Entity erstellen

Diskutiere Methode für jede beliebe Entity erstellen im Java Basics - Anfänger-Themen Bereich.
B

beta20

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:

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
 
mihe7

mihe7

So in der Richtung:
Java:
public <T> List<T> findAllMyEntityListByQueryAndNumberOfResult(
            List<ObjectForSearchList> searchList, int numberOfResult, Class<T> clazz) {
 
B

beta20

könntest du bitte die ganze Methode hier definieren (also nicht nur den Methodenkopf)...
Insbesondere der Rückgabewert ist mir auch nicht klar...
 
mihe7

mihe7

Für ein einfaches findAll mit JPQL sollte das etwa so funktionieren:
Java:
public <T> List<T> findAll(String entityName, Class<T> entityClass) {
    String query = String.format("SELECT e FROM %s e", entityName);
    TypedQuery<T> tq = em.createQuery(query, entityClass);
    return getResultList();
}

public <T> List<T> findAll(Class<T> entityClass) {
    return findAll(entityClass.getSimpleName(), entityClass);
}
 
J

JustNobody

String.format ansehen. %s wird durch den Inhalt von entityName ersetzt.

 
Thema: 

Methode für jede beliebe Entity erstellen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben