Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Типизация метода дженериками для NamedQuery


Автор: isabsent 21.8.2011, 18:26
Хочется иметь для DAO строго типизованные методы. Для методов, которым надо явно указать класс, на котором действует метод, это сделать несложно. Например, так:
Код

    public <T> T findById(Class<T> clazz, Long id) {      
        return (T) getSession().get(clazz, id);
    }

или так 
Код

    public <T> List<T> findByExample(Class<T> clazz, T exampleInstance) {
        Criteria crit = getSession().createCriteria(clazz);       
        return (List<T>) crit.list(); 
    }

Однако, для методов, использующих NamedQuery, базовый класс задаётся неявно - а именно классом, на котором определён конкретный NamedQuery. Как узнать тип базового класса и типизовать метод DAO в этом случае? 

Автор: tux 21.8.2011, 18:53
Не совсем понял что значит "класс, на котором определён конкретный NamedQuery", но возможно стоит использовать метод http://docs.jboss.org/hibernate/core/3.5/javadocs/org/hibernate/Query.html#getReturnTypes() который вернет все типы возвращаемые именованным запросом.

Автор: isabsent 21.8.2011, 20:16
Цитата(tux @ 21.8.2011,  18:53)
Не совсем понял что значит "класс, на котором определён конкретный NamedQuery"

@NamedQuery определяется ТОЛЬКО на классе сущности - если я правильно понимаю спецификацию 
Цитата

Query names are scoped to the persistence unit. Its definition should be put before the entity class definition.

В сторону getReturnTypes() я смотрел, но что-то не смог найти ни одного примера где бы с его помощью делалось то, что мне надо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)