Java hibernate HQL delete查询使单列为空

Java hibernate HQL delete查询使单列为空,java,spring,hibernate,hql-delete,Java,Spring,Hibernate,Hql Delete,我正在开发SpringHibernate应用程序,并尝试使用非id多对一关系列从表中删除。 实体类包括: @Entity public class Day { @id(name = "DAY_ID") dayId; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "DAY_ID") List<Holiday> holidayList; ... } @

我正在开发SpringHibernate应用程序,并尝试使用非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;
...
}
在控制台中,我得到了正确的delete查询,但在检查DB时发现该行仍然存在,但现在holiday表中的DAY_ID列为null。我不知道为什么会发生这种情况?

编辑:帮助!!!我的主要问题是为什么DAY_ID列变为空值???

我不确定这是否是您的问题,但在您的查询中,您说“从假日删除…”,但您的类名是假日。在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对象进行比较。

您的ONDELETE外键约束是什么?您的应用程序的另一部分是否会插入一行

当你说你得到了一个正确的删除查询时,你能发布SQL吗?我真诚地怀疑您得到的删除查询是否正确,因为这意味着您的数据库无法正确执行简单的删除操作。您好,生成的查询是Hibernate:delete from HOLIDAYS where DAY_ID=1这是Hibernate在您显示了show_sql=true时在日志中打印的内容,还是您只是假设如果字符串查询是正确的好吗?是的,这是查询运行时控制台中打印出来的内容。是的,我使用的是classname。这是一个输入错误。尝试传递对象,仍然得到相同的结果,只有day_id更改为null。我想知道这是因为spring吗?上面的代码在spring中应该可以正常工作,您肯定使用了别名并引用了上面的代码?我还尝试复制/粘贴hibernate打印的SQL,并直接对数据库使用它来查看结果。hibernate生成的查询在数据库中运行良好。我不知道这里发生了什么,而且为什么列值变为null?嗯,我已经没有想法了。我不知道您使用的是什么数据库,但可以获得一个名为(通常有)的查询历史记录。我会检查历史记录,运行代码,然后再次检查以查看它是否接收到您在日志中看到的内容。
String query = "DELETE FROM Holiday h WHERE h.day = :day";
Query holidayDeleteQuery = getSession().createQuery(query);
query.setParameter("day", dayObject);
holidayDeleteQuery.executeUpdate();