How can I set Datasource when I'm creating Hibernate SessionFactory?

后端 未结 8 403
星月不相逢
星月不相逢 2020-12-02 17:17

I\'m creating SessionFactory and I have my datasource as object in code where I\'m creating SessionFactory, but i cannot set datasource to Hibernate Configuration object. So

8条回答
  •  醉梦人生
    2020-12-02 18:14

    Luiggi Mendoza's answer is why my search sent me here, but I figure I should give my version because I spent quite some time looking around for how to do this - it sets it up with the Spring in-memory database for testing, a SessionContext and the hbm.xml in case you're not using annotations:

    /**
     * Instantiates a H2 embedded database and the Hibernate session.
     */
    public abstract class HibernateTestBase {
    
        private static EmbeddedDatabase dataSource;
        private static SessionFactory sessionFactory;
        private Session session;
    
        @BeforeClass
        public static void setupClass() {
            dataSource = new EmbeddedDatabaseBuilder().
                    setType(EmbeddedDatabaseType.H2).
                    addScript("file:SQLResources/schema-1.1.sql").
                    addScript("file:SQLResources/schema-1.2.sql").
                    build();
            Configuration configuration = new Configuration();
            configuration.addResource("hibernate-mappings/Cat.hbm.xml");
            configuration.setProperty("hibernate.dialect",
                    "org.hibernate.dialect.Oracle10gDialect");
            configuration.setProperty("hibernate.show_sql", "true");
            configuration.setProperty("hibernate.current_session_context_class",
                    "org.hibernate.context.internal.ThreadLocalSessionContext");
            StandardServiceRegistryBuilder serviceRegistryBuilder =
                    new StandardServiceRegistryBuilder();
            serviceRegistryBuilder.applySetting(Environment.DATASOURCE, dataSource);
            serviceRegistryBuilder.applySettings(configuration.getProperties());
            StandardServiceRegistry serviceRegistry =
                    serviceRegistryBuilder.build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            sessionFactory.openSession();
        }
    
        @AfterClass
        public static void tearDown() {
            if (sessionFactory != null) {
                sessionFactory.close();
            }
            if (dataSource != null) {
                dataSource.shutdown();
            }
        }
    
        @Before
        public final void startTransaction() {
            session = sessionFactory.getCurrentSession();
            session.beginTransaction();
        }
    
        @After
        public final void rollBack() {
            session.flush();
            Transaction transaction = session.getTransaction();
            transaction.rollback();
        }
    
        public Session getSession() {
            return session;
        }
    
    }
    

    and you'll need these:

    
      org.springframework
      spring-jdbc
      4.1.6.RELEASE
    
    
      com.h2database
      h2
      1.4.184
      test
    
    

提交回复
热议问题