J2EE进阶(十九)Nested exception: java.io.FileNotFoundException: http://hibernate.org/dtd/hibernate-mapping-3.0.dtd
在调试过程中,莫名奇妙的出现了“Nested exception:java.io.FileNotFoundException: http://hibernate.org/dtd/hibernate-mapping-3.0.dtd”的错误,截图如下:
对于这一错误,查看错误提示可知,是由于“http://hibernate.org/dtd/hibernate-mapping-3.0.dtd%20”文件找不到造成的。之前也没有找不到这一文件啊。由于是获取网络文件,怀疑是网络造成的问题,可是网络链接良好。从网上搜寻答案,一番折腾一无所获,回去继续看错误报告,结合错误源文件,发现了下面的异常。
原来是由于不知何时手误将“http://hibernate.org/dtd/hibernate-mapping-3.0.dtd%20”的后面多加了一个空格,导致文件找不到了。我只想说“这也可以?”将空格删除之后,问题得到解决。
后期经过确认,是由于利用Hibernate的反向工程生成.hbm.xml文件时多加的一个空格,坑!
附 org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
分析及解决:
要操作的数据表中的id(即主键)的类型设置成了“自动增长类型”,而在你的
hibernate.cfg.xml中,id的生成方式是assigned,即
<id name="id" type="integer">
column name="id" />
<generator class="assigned" />
</id>
这种搭配是矛盾的!因为主键的assigned生成方式由程序自动生成表的主键,即在你的测试程序中要调用setId()方法,且必须在调用save()前调用(或者说在调用save()前必须指定id,其实就是说,主键值不能为空!)。
把主键的生成方式改为native,它的特征是能够根据底层数据库自动选择主键生成方式。