2011-12-14 4 views
0

Got исключение причина.
Hibernate: MappingException когда выполнить getHibernateTemplate() запрос на обновление

org.hibernate.MappingException: Unknown entity: UserDetails set confirmed=true where username=? and confirmationCode=? 

, когда этот код выполняется:

public void confirmUser(String username,String confirmationCode){ 
    getHibernateTemplate().update("UserDetails set confirmed=true where username=? and confirmationCode=?",new Object[]{username,confirmationCode}); 
} 

EDIT

This query works OK: 
    public String getUserMail(String username) { 
     return (String) DataAccessUtils.uniqueResult(getHibernateTemplate().find(
       "select mail from UserDetails where username=?", new Object[] { username })); 
    } 

Это означает, , что мой hbm.xml должен быть ОК тоже:

<hibernate-mapping> 
    <class name="model.UserDetails" table="users"> 
     <id name="id"> 
      <generator class="increment"/> 
     </id> 
     <property name="username" column="username"/> 
     <property name="password" column="password"/> 
     <property name="enabled" column="enabled"/> 
     <property name="mail" column="mail"/> 
     <property name="city" column="city"/> 
     <property name="confirmed" column="confirmed"/> 
     <property name="confirmationCode" column="confirmation_code"/> 

     <set name="authorities" cascade="all" inverse="true"> 
      <key column="id" not-null="true"/> 
      <one-to-many class="model.Authority"/> 
     </set> 

    </class> 
</hibernate-mapping> 

Вопрос заключается в том, как выполнить update метод с набором параметров, поскольку getHibernateTemplate().update предполагает передать Object методу, но не SQL запрос.

+0

Попробуйте использовать полное имя класса. И добавьте еще несколько деталей. –

+0

@ slayer_b Вы предлагаете добавить его с объявлением пакета? – sergionni

+0

Да. Опубликуйте свою сущность, конфигурацию, дао, я имею в виду весь класс. Потому что кажется, что ошибка в конфигурации. –

ответ

0

Чтобы выполнить обновление с помощью Hibernate ORM, я использовал такую ​​конструкцию:

SessionFactory sf = getHibernateTemplate().getSessionFactory(); 
Session s = sf.openSession(); 
Query q = s.createQuery("UserDetails set confirmed=true 
where username:username and confirmationCode=:confirmationCode"); 
q.setString("username", username); 
q.setString("confirmationCode", confirmationCode); 
q.executeUpdate(); 

Это было сделано из-за getHibernateTemplate().update не позволяет именованных Params.
Должен быть объект.

Смежные вопросы