2016-07-19 10 views
8

Я новичок в Hibernate.Hibernate 5.2 version -> Много методов запроса осуждают?

Я пытаюсь получить список имени и фамилии всех администраторов.

В моем следующем коде есть два предупреждения. Я уже пытался много искать в Интернете.

1) Запрос является сырым типом. Ссылки на общий тип запроса должны быть параметризованы.

2) Список методов() из типа Query устарел.

public List<Object> loadAllAdmins() { 
       List<Object> allAdmins = new ArrayList<Object>(); 
       try { 
         HibernateUtil.beginTransaction(); 

         Query q = currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin"); 

         allAdmins= q.list(); 

         HibernateUtil.commitTransaction(); 
       } catch (HibernateException ex) { 
         System.out.println("List<AdminBean> loadAllPersons: HibernateException"); 
       } 
       return allAdmins; 
     } 

Но я вижу пример кода, подобного этому во всем Интернете. Как мне решить эти две проблемы?

Update

Я просто попытался использовать критерии, как предложено. Он также говорит, что метод list() не критичен для критериев ... Кажется, что многие методы не соответствуют требованиям Query и Criteria, включая uniqueResult() и другие ... Любое предложение о том, как я должен их заменить?

+0

Возможно, проверять данный класс в JavaDoc, может быть предложение - http://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/query/QueryProducer.html#createSQLQuery-java.lang .String-. – Xdg

ответ

8
public List<Admin> getAdmins() { 
    List<Admin> AdminList = new ArrayList<Admin>(); 
    Session session = factory.openSession(); 
    for (Object oneObject : session.createQuery("FROM Admin").getResultList()) { 
     AdminList.add((Admin)oneObject); 
    } 
    session.close(); 
    return AdminList; 
} 

Предупреждения взяты из «Тип вывода».

У меня была аналогичная проблема. Однако я нашел решение без «SuppressWarnings».


В последнее время я обнаружил более короткий способ кодировать одни и те же вещи без вывода типа.

public List<Admin> getAdmins() { 
    Session session = factory.openSession(); 
    TypedQuery<Admin> query = session.createQuery("FROM Admin"); 
    List<Admin> result = query.getResultList(); 
    session.close(); 
    return result; 
} 

Надеюсь, это поможет.

+0

Это похоже на ту же процедуру, что и в моем ответе, за исключением явного приведения, не так ли? Разве это не проблема времени выполнения для каждой экспликации объекта (см. Http://stackoverflow.com/questions/2170872/does-java-casting-introduce-overhead-why)? –

+0

1. Нет. Как я уже сказал, предупреждение «Подавление» удаляется. 2. Да, но я думаю, это было бы полезно. Обычно стоит попытаться выработать способ избежать предупреждения, а не подавлять его. – Pika

0

Вы пытались использовать критерии?

Смотрите, что пример:

public List<NoteVO> listNotes() { 
    Session session = HibernateSessionFactory.getSession(); 

    Criteria crit = session.createCriteria(NoteVO.class); 

    List<NoteVO> listNotes = crit.list(); 

    session.close(); 
    return listNotes; 
} 
+0

Да, я просто попробовал. Он также говорит, что метод list() также непримирим к критериям. Кажется, что «все методы» не соответствуют требованиям Query и Criteria, включая uniqueResult() и другие ... Я не знаю, почему это могло когда-либо бывает. Я сделал то же самое, что и все онлайн-уроки. –

3

я тестировал другие методы hibernate javadoc и я придумал getResultList() метод интерфейса TypedQuery<T>. Пример:

public List<Admin> getAdmins() { 
    Session session = factory.openSession(); 
    @SuppressWarnings("unchecked") 
    List<Admin> result = session.createQuery("FROM Admin").getResultList(); 
    session.close(); 
    return result; 
} 

Разница заключается в том, что возвращаемый тип createQuery не Query, но подинтерфейс называется TypedQuery<T>. Потому что это напечатано, оно также фиксирует предупреждение «Запрос необработанного типа».

С помощью этого решения вы можете получить Safety Тип предупреждение о, которая может быть решена либо путем отливки каждого объекта в явном виде или путем добавления @SuppressWarnings("unchecked")

Что касается критерии см hibernate user guide

Тем не менее, я задаюсь вопросом, почему tutorials-страница спящего режима не настроена.

+0

Этот метод слишком устарел! –