создать собственный запрос JSF

#jsf #primefaces

#jsf #primefaces

Вопрос:

я получил ошибку в своих кодах следующим образом :

javax.постоянство.Исключение PersistenceException: Исключение [EclipseLink-4002] (службы сохранения Eclipse — 2.5.0.v20130507-3faac2b): org.eclipse.persistence.исключения.Исключение DatabaseException Внутреннее исключение: java.sql.SQLSyntaxErrorException: Синтаксическая ошибка: обнаружена «:» в строке 1, столбец 42. Код ошибки: -1 Вызов: выберите userLevelId из ПОЛЬЗОВАТЕЛЕЙ, где id = :id Запрос: DataReadQuery (sql =»выберите userLevelId из ПОЛЬЗОВАТЕЛЕЙ, где id = :id «)

и мой код :

         public String cek() { if (tmp.equals(tmp2)) {
          y =1;
          level = getItems().toString(); } 
          .....
          .....
        }


       public List<Users> getItems() {
         if (y.equals(1)) {
         y=0;
         tmp = tmp.trim();
         return em.createNativeQuery("select userLevelId from USERS where id = :id")
         .setParameter("id", tmp).getResultList(); }
    }
 

так в чем же моя вина?
кто-нибудь может мне помочь?
thx b4

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

1. Вам не хватает кавычек? select userLevelId from USERS u where u.id = ':id'

Ответ №1:

Основная проблема

  • Собственные запросы не используют синтаксис именованных параметров ( :id ). Используйте синтаксис подготовленного оператора с ? . Затем используйте. setParameter( indexOf?, value ) . Например
     ...("select userLevelId from USERS where id = ?")
    ...setParameter(1, tmp)
     

Другие примечания

  • Не выполняйте запрос в получателе, если получатель является частью привязки свойства. Например, если у вас есть List<User> items свойство bean, не выполняйте никакой бизнес-логики или, в вашем случае, запросов в getter. Средство получения может быть вызвано по нескольким причинам, помимо того, что вы ожидаете. Вместо этого вы можете инициализировать его в @PostConstruct методе или в своем конструкторе. Если вам нужно обновить список, создайте метод прослушивателя, который обновит его, и напрямую вызовите этот метод
  • Обычной практикой является разделение бизнес-уровня и веб-уровня (управляемый компонент). Бизнес-уровень может быть EJB, в который вы вводите управляемый компонент

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

1. кстати, извините, я хочу отладить свой проект в netbeans 8.0, почему, когда я отлаживаю, но система создает мой проект? что я должен сделать?

2. Вы спрашиваете, почему Netbeans создает ваш проект до того, как он запускает режим отладки?

3. нет, я уже создал свой проект, но когда я запускаю / отлаживаю, после этого netbeans снова создает мой проект, чтобы мой проект не отображался. извините, если мои слова привели вас в замешательство.. хе-хе