中午快吃饭的时候问小弟任务作的怎么样,小弟突然和我说他遇到一个郁闷问题。在使用POI做Excel数据批量导入程序编写的时候,hibernate的save方法无效。但是从Form表单中提取信息做单个保存有效。Eclipse的控制台没有报错信息。
刚听问题,觉得很奇怪,把玩Hibernate多年,虽然离精通还相距甚远,但是遇到的大大小小的问题还不少,倒是没有遇到过这种问题。
凑过去粗看了下程序执行,确实什么问题也没有。控制台无任何信息,页面也按照指定方式进行了跳转。思索着是不是因为多对一、一对多关系中inverse的配置错,导致类本身无法保存信息。可是多对一关系中一方的hbm.xml文件里压根儿就没有配置一对多关系,因此Hibernate应该是以默认的形式执行操作,也就是说应该会保存。 眼下没有错误报告是最大的问题,多少得弄出点错误,我在程序中给需要保持的持久类的ID手动配置了一个不违反唯一性约束的数值,重复保存操作。我知道,一旦制定了ID,hibernate会去执行update操作而非insert/save操作。错误始终是会报的,不过,控制台输出的并非是我所预料的错误,而是告知该记录引用了关联表中不存在的记录。
这下豁然开朗,回顾小弟写的代码,发现小弟是用new方法构造了一个引用类的对象并set进了需要持久化的对象中,导致hibernate无法保存数据。
不过不知道为什么之前不报错呢?