#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’ в вашей конфигурации.