0

我正在开发 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 列更改为空值?

4

2 回答 2

0

你的 ONDELETE 外键约束是什么?可能是您的应用程序的其他部分插入了一行?

于 2011-10-13T08:18:48.257 回答
0

我不确定这是您的问题,但在您的查询中您说“DELETE FROM Holidays ...”,但您的班级名称是Holiday。在 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 对象的 day 字段(“h.day”)并将其与您拥有的实际 Day 对象进行比较。

于 2011-10-12T10:07:59.867 回答