我也只是从3.0迁移到4.0,我假设有3个原因导致我使用以下DTD
这种情况下的实际解决方法
确保路径中没有任何旧的3.0 jar,否则您会看到此异常。
可能的原因1
对于hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
对于hbm文件
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
对我来说效果很好。
可能的原因2
您
<hibernate-mapping>的hbm文件中有拼写错误。
编辑:
我正在使用编程和cfg文件的混合配置。当我尝试使用所有程序化程序时,它对我不起作用。我也没有从SO获得太多帮助。但是下面对我有用。
try { String connection = "jdbc:mysql://" + Globals.DBSERVER.trim() + "/myDB?autoReconnect=true&failOverReadonly=false&maxReconnects=10"; log.debug("Connection URL "+connection) ; Configuration configuration = new Configuration(); configuration .setProperty("hibernate.connection.url", connection) .setProperty("hibernate.connection.username", Globals.DB_USER_NAME.trim()) .setProperty("hibernate.connection.password", Globals.DB_PASSWORD.trim()) ; configuration.configure(); sessionFactory = configuration .buildSessionFactory(new ServiceRegistryBuilder() .applySettings(configuration.getProperties()).buildServiceRegistry()); } catch (Exception e) { log.fatal("Unable to create SessionFactory for Hibernate"); log.fatal(e.getMessage()); log.fatal(e); e.printStackTrace(); }我的问题帮助我解决了这个问题。
总体建议
全部采用编程方式是一个坏主意。由于有很多程序化的东西,您需要从列到变量的映射到变量类型的添加。这将是调试的噩梦。我建议您做一些 非
程序化的工作,而无需编程就可以做到。对我来说,我只需要从cmd行获取用户名密码,以便可以将产品部署在任何服务器上。因此,我只是将该程序化了。



