Пните в ухо
От: Аноним  
Дата: 18.08.10 14:56
Оценка:
Здравствуйте!

Проблема: Есть класс/бин User в нем 5 стринговых полей, айдишник, и Set<MyBean>, пустой конструктор и все гет сет.

вот маппинг
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="gwt.client.Entity.User" table="User">
    <id column="User_id" name="User_id" type="int">
      <generator class="increment"/>
    </id>
    <property column="Name" name="Name" type="java.lang.String"/>
      <property column="SurName" name="SurName" type="java.lang.String"/>
      <property column="SecondName" name="SecondName" type="java.lang.String"/>
    <property column="Pass" name="Pass" type="java.lang.String"/>
    <property column="Login" name="Login" type="java.lang.String"/>


      <set name="albums" table="user_album" lazy="false" cascade="all" >
          <key column="user_id"/>
          <many-to-many column="album_id"  class="gwt.client.Entity.Album"/>
        </set>
    
      

  </class>
</hibernate-mapping>


в hibernate конфиге ресурс указан

выдераю по логину так


i = (Integer) session.createSQLQuery("SELECT User_id FROM User WHERE Login = :str").uniqueResult();


получаю

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [str] [SELECT User_id FROM User WHERE Login = :str]
какие еще сеты? все есть! не к str же — передается в кач параметра

если так

i = (Integer) session.createSQLQuery("SELECT User_id FROM User WHERE Login = :str").setString("Login",str).uniqueResult();


то

Parameter Login does not exist as a named parameter in [SELECT User_id FROM User WHERE Login = :str]


если так

List<Integer> res = new ArrayList<Integer>(session.createQuery("select u.User_id from User as u where u.Login = :str ").list());


то

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [str] [select u.User_id from User as u where u.Login = :str ]

если так

 List<User> us = new ArrayList<User>(session.createQuery("from User where Login = "+ str).list());



то
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'newLogin' in 'where clause'

и наконец


List<User> us = new ArrayList<User>(session.createQuery("from User where Login = :str").list());


то

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [str] [from User where Login = :str]

Есть ли знатоки этой штуки??? Я запутался!!!
hibernate gwt
Re: Пните в ухо
От: uhh  
Дата: 18.08.10 15:01
Оценка:
А>Caused by: org.hibernate.QueryException: Not all named parameters have been set: [str] [from User where Login = :str]

А>Есть ли знатоки этой штуки??? Я запутался!!!



читай описание: "Not all named parameters have been set"

List<User> us = new ArrayList<User>(session.createQuery("from User where Login = :str").list());


пытаешься выполнить SELECT, не указав при этом параметра, по которому производится поиск.
Re: Пните в ухо
От: sbob Россия www.gridgain.com
Дата: 18.08.10 15:03
Оценка:
Âàì íàäî ïåðåäàòü â query ïàðàìåòð "str", âåðîÿòíî. setString("str", userLoginVariable) âîçìîæíî âàñ ñïàñåò.
Íó èëè ðàçáåðèòåñü êàê âîîáùå query ôîðìèðóåòñÿ, ÷òîáû íå ïåðåáèðàòü ãëóïîñòè.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re: Пните в ухо
От: 6lackbird Россия  
Дата: 18.08.10 15:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>i = (Integer) session.createSQLQuery("SELECT User_id FROM User WHERE Login = :str").uniqueResult();
А>


А>получаю


А>Caused by: org.hibernate.QueryException: Not all named parameters have been set: [str] [SELECT User_id FROM User WHERE Login = :str]

А>какие еще сеты? все есть! не к str же — передается в кач параметра

Значение параметра str не задано для запроса (см. следующий запрос)

А>если так


А>
А>i = (Integer) session.createSQLQuery("SELECT User_id FROM User WHERE Login = :str").setString("Login",str).uniqueResult();
А>


А>то


А>Parameter Login does not exist as a named parameter in [SELECT User_id FROM User WHERE Login = :str]


Значение переменной str не задано, в метод setString необходимо передать имя переменной, в данном случае str, т.е. так

А>
А>i = (Integer) session.createSQLQuery("SELECT User_id FROM User WHERE Login = :str").setString("str",str).uniqueResult();
А>


остальное аналогично
"Мы будем уничтожать свое ядерное оружие вместе с Америкой" (c) Б. Ельцин
Re[2]: Пните в ухо
От: Аноним  
Дата: 18.08.10 15:50
Оценка:
Здравствуйте, 6lackbird, Вы писали:



А>>Parameter Login does not exist as a named parameter in [SELECT User_id FROM User WHERE Login = :str]


6>Значение переменной str не задано, в метод setString необходимо передать имя переменной, в данном случае str, т.е. так


А>>
А>>i = (Integer) session.createSQLQuery("SELECT User_id FROM User WHERE Login = :str").setString("str",str).uniqueResult();
А>>


6>остальное аналогично



Огромное спасибо чуть разобрался, при такой строчке которую вы написали выдает Caused by: java.lang.NullPointerException: null
такой же рез-тат при

i = (Integer) session.createQuery("select u.User_id from User as u where u.Login = :str").setParameter("str",str).uniqueResult();


а при

List<Integer> res = new ArrayList<Integer>(session.createQuery("select u.User_id from User as u where u.Login = :str ").setParameter("str",str).list());



Caused by: org.hibernate.SessionException: Session was already closed


но зато при


List<User> us = new ArrayList<User>(session.createQuery("from User where Login = :str").setParameter("str",str).list());



все работает — обьясните доходчиво ради бога почему? я так и не возьму в толк!!!
Re[3]: Пните в ухо
От: 6lackbird Россия  
Дата: 19.08.10 06:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Огромное спасибо чуть разобрался, при такой строчке которую вы написали выдает Caused by: java.lang.NullPointerException: null

А>такой же рез-тат при

А>
А>i = (Integer) session.createQuery("select u.User_id from User as u where u.Login = :str").setParameter("str",str).uniqueResult();
А>


Попробуем потелепатировать

тут наверное пропущено
  int i;
  i = (Integer) session.createQuery("select u.User_id from User as u where u.Login = :str").setParameter("str",str).uniqueResult();


Запрос вернул null, и далее ты пытаешься закастить его к int, что и приводит к NPE


А>а при


А>
А>List<Integer> res = new ArrayList<Integer>(session.createQuery("select u.User_id from User as u where u.Login = :str ").setParameter("str",str).list());
А>



А>Caused by: org.hibernate.SessionException: Session was already closed


сессия закрыта, смотреть на код вокруг


А>но зато при



А>
А>List<User> us = new ArrayList<User>(session.createQuery("from User where Login = :str").setParameter("str",str).list());
А>


выделенное лишнее, а в списке us потом что нить есть?
"Мы будем уничтожать свое ядерное оружие вместе с Америкой" (c) Б. Ельцин
Re[4]: Пните в ухо
От: Аноним  
Дата: 21.08.10 13:19
Оценка:
Здравствуйте, 6lackbird, Вы писали:

int i не забыл, почему закрыта сессия не пойму, а в us обьект пользователя который нужен!
Re: Пните в ухо
От: Donz Россия http://donz-ru.livejournal.com
Дата: 24.08.10 07:55
Оценка:
Здравствуйте, Аноним, Вы писали:

Зачем вообще использовать хибернейт, если писать запросы руками, да еще в конкретном SQL, а не в HSQL и при этом пытаться выбрать не объекты, а примитивные типы по отдельности?

Подозреваю, что Session was already closed возникается из-за генерирующихся двух запросов при попытке выбрать Integer. Первый запрос выбирает объект User, а вторым идет попытка выбрать конкретное поле этого объекта. Хотя по идее хибернейт должен сам понять, что все данные полей уже есть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.