Hibernate HQL запрос на удаление обнуляет один столбец - PullRequest
0 голосов
/ 12 октября 2011

Я работаю над приложением Spring Hibernate и пытаюсь удалить его из таблицы, используя столбец «многие к одному», не связанный с id.Классы сущностей:

@Entity  
public class Day {  
@id(name = "DAY_ID")  
dayId;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "DAY_ID")
List<Holiday> holidayList;  
...  
}

@Entity  
public class Holiday {  
@id(name="HOLIDAY_ID")
holidayId;  
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DAY_ID")
Day day;
...
}

Я пытаюсь удалить строку из таблицы выходных, используя hql.

String query = "DELETE FROM Holiday WHERE day.dayId = " + dayObject.getdayId();
Query holidayDeleteQuery = getSession().createQuery(query);
holidayDeleteQuery.executeUpdate();

В консоли я получаю правильный запрос на удаление, но при проверке БД обнаружил, что строка все еще там, но теперь столбец DAY_ID в праздничной таблице пуст.Я не могу понять, почему это происходит?
РЕДАКТИРОВАТЬ: помочь !!!Моя основная проблема заключается в том, почему столбец DAY_ID меняется на нулевое значение ??

Ответы [ 2 ]

0 голосов
/ 13 октября 2011

Какое ограничение вашего внешнего ключа ONDELETE?Может быть, что другая часть вашего приложения вставляет строку?

0 голосов
/ 12 октября 2011

Я не уверен, что это ваша проблема, но в своем запросе вы говорите "УДАЛИТЬ ИЗ Праздники ...", но ваше имя класса Праздник . В HQL вы должны использовать имена классов, а не имена таблиц или что-то еще. Это опечатка в вашем коде или только здесь?

На самом деле, если посмотреть дальше, есть еще несколько проблем. Вот как бы я это написал:

String query = "DELETE FROM Holiday h WHERE h.day = :day";
Query holidayDeleteQuery = getSession().createQuery(query);
query.setParameter("day", dayObject);
holidayDeleteQuery.executeUpdate();

Чтобы разбить его - используйте имя класса «Holiday», присвойте ему псевдоним «h», затем укажите поле дня объекта «Holiday» («h.day») и сравните его с имеющимся у вас объектом Day.

...