2016-01-15 3 views
0

Скажем, у меня есть три сущности в Java: сущность A, сущность B и сущность C. Объект A имеет сущность B как поле, а сущность B имеет объект C в качестве поля. Теперь в моем классе DAO мне присваивается объект Entity C. Используя HQL-запрос Hibernate, возможно ли обновить все экземпляры Entity A в базе данных, которые имеют объект B, которые, в свою очередь, имеют поле своей сущности C, равное объект объекта C. Конкретно, я представляю себе что-то вроде ниже. Возможно ли следующее предложение? Обратите внимание, что я использую идентификаторы для проверки равенстваHibernate HQL Поле запроса свойства

C c = new C(); 
c.setId(someId); 

Query query = session.createQuery("update A set someField = true where b.c=:c"); 
     query.setEntity("c", c); 
     query.executeUpdate(); 
+0

Возможно ли использовать соединение в запросе? – xcoder

+0

Каково было бы ваше конкретное решение? –

ответ

0

Соединения не поддерживаются в операциях DML в спящем режиме. Вы можете использовать подзапросы для этой цели. Например:

update A set someField = true 
where id in (select id from A where b.c = :c) 
+0

Вы уверены, что это работает? в чем разница между этим утверждением и высказыванием выше от меня? –

+0

@KevinWu Вы вообще пытаетесь использовать свой код перед отправкой? :) Вы также не рассказали нам о результатах вашей первоначальной попытки. Попробуйте и вернитесь к нам с результатами, иначе невозможно догадаться, что будет работать в настройке вашего приложения. Что касается разницы, неявные соединения через пути навигации переводятся в соединения в предложении from. –

+0

true, я сделаю снимок. КСТАТИ. В настоящее время мы не совсем в состоянии проверить наш код, но скоро придет время :) –