2016-07-28 3 views
0

У меня есть это:Hibernate производит утверждение некорректное обновление

String hql = "UPDATE User u SET u.externalId = u.id WHERE u.directory.name = 'MySuperAwesomeName' AND u.externalId = null"; 
    Query query = session().createQuery(hql); 
    query.executeUpdate(); 

И Hibernate бросает исключение, сказав, что:

Unexpected token JOIN, requires SET in statement [update user cross join set external_id=id where name='MySuperAwesomeName' and (external_id is null)] 

Пожалуйста, помогите мне, указывая, что я сделал неправильно.

Отображение для пользователя объекта:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="com.example.User" table="user" lazy="true"> 
     <id name="id" column="id" unsaved-value="null"> 
      <generator class="com.example.MySuperAwesomeGenerator"/> 
     </id> 
     <property name="name" column="user_name" type="string" not-null="true" length="255"/> 
     <property name="externalId" column="external_id" type="string" not-null="false" length="255" index="idx_external_id"/> 
     <many-to-one name="directory" column="directory_id" not-null="true" foreign-key="fk_user_dir_id" unique-key="uk_user_name_dir_id" class="com.example.DirectoryImpl"/> 
    </class> 
</hibernate-mapping> 
+1

добавьте свое лицо, чтобы помочь вам лучше. – Apostolos

ответ

0

Ответ может измениться этот запрос в запрос с малым подзапроса

UPDATE User u SET u.externalId = u.id WHERE u.directory.id IN (SELECT d.id FROM DirectoryImpl d where d.name = 'MySuperAwesomeName') AND u.externalId = NULL 

Он работает.

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