Должен ли я использовать общий тип или подстановочный знак при попытке получить список объектов?

#java #sql #spring #generics

#java #sql #весна #общие

Вопрос:

Я пытаюсь получить список общих объектов. Эти объекты являются сущностями, поэтому списки похожи List<Employee> List<Recruit> и так далее.

У меня много объектов из PostgreSQL таблиц, и я хочу просто получить список на основе введенного типа. Я пытаюсь использовать подстановочный знак, но он говорит

Рассмотрите возможность определения компонента типа java.lang.Класс в вашей конфигурации.

Моя функция в GenericDaoImpl :

 public List<?> findFromTable(String tableName) {
    return getEntityManager().createQuery("SELECT * from "   tableName).getResultList();
}
  

Комментарии:

1. Учитывая, что это может возвращать объекты разных типов, все, что вы можете безопасно вернуть, есть List<?> .

2. Кроме того, xkcd.com/327

3. Именованные параметры предлагаются в JPQL docs.oracle.com/javaee/6/tutorial/doc/bnbrg.html

Ответ №1:

Вы также можете передать тип в своей функции, чтобы иметь больше смысла. superType — это корневой класс ваших объектов. Если у вас есть модель ваших классов и есть родительский элемент coomon :

 public  <T extends superType> List<T> findFromTable(String tableName, Class<T> clz) {
    return getEntityManager().createQuery("SELECT * from "   tableName).getResultList();
}
  

Если у вас нет общего родительского элемента, вы будете использовать подстановочный знак.

 public List<?> findFromTable(String tableName) 
  

Комментарии:

1. У меня нет общего родителя. Теперь я попытался запустить его, и он показывает описание: Компоненту требуется компонент типа net.lacit.militaryRegistr.dao.GenericDAO, который не удалось найти. Действие: Рассмотрите возможность определения компонента типа ‘net.example. Registr.dao.GenericDAO’ в вашей конфигурации.