UnsupportedOperationException: The application must supply JDBC connections

后端 未结 3 661
走了就别回头了
走了就别回头了 2020-12-03 19:28

If I dont set anything programmatically and just call Configuration configuration = new Configuration().configure(); and use the hibernate.properties (as below)

3条回答
  •  执笔经年
    2020-12-03 19:51

    Wow, just fixed the problem.

    sessionFactory = configuration.buildSessionFactory(new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry());
    

    I was missing the

    .applySettings(configuration.getProperties())

    Learnings

    1. configure() should be called AFTER setProperty
    2. Use hibernate.connection.url and NOT connection.url if you use hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
    3. Set log4j property for hibernate logs to ALL, so that you can see more detailed issues
    4. To get rid of the WARN Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/. Use namespace http://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!, you need to replace http://www.hibernate.org/dtd/ in the cfg.xml and all hbm files too. Dont forget teh hbm files, they too use the same DTD.

    Lastly, referred to this, to fix this. The last advice by Bill Gorder is superb.

    private static SessionFactory configureSessionFactory()    
            throws HibernateException {    
        Configuration configuration = new Configuration();    
        configuration.configure();    
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()    
                .applySettings(configuration.getProperties())    
                .buildServiceRegistry();    
        return configuration.buildSessionFactory(serviceRegistry);    
    }  
    

提交回复
热议问题