当前位置: 首页 > 知识库问答 >
问题:

org.springframework.transaction.不能创建事务异常:无法打开事务的Hibernate会话

满自明
2023-03-14

错误日志:

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.372 sec <<< FAILURE!
testCRUDCategory(net.kzn.shoppingbackend.test.CategoryTestCase)  Time elapsed: 0.124 sec  <<< ERROR!
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection
    at org.springframework.orm.hibernate5.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:542)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:447)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:277)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy32.add(Unknown Source)

冬眠图。JAVA

@Configuration
@ComponentScan(basePackages={"net.kzn.shoppingbackend.dto"})
@EnableTransactionManagement
public class HibernateConfig {

    // Change the below based on the DBMS you choose
    private final static String DATABASE_URL = "jdbc:h2:tcp://localhost/~/onlineshopping";
    private final static String DATABASE_DRIVER = "org.h2.Driver";
    private final static String DATABASE_DIALECT = "org.hibernate.dialect.H2Dialect";
    private final static String DATABASE_USERNAME = "sa";
    private final static String DATABASE_PASSWORD = "";

    // dataSource bean will be available
    @Bean
    public DataSource getDataSource() {

        BasicDataSource dataSource = new BasicDataSource();

        // Providing the database connection information
        dataSource.setDriverClassName(DATABASE_DRIVER);
        dataSource.setUrl(DATABASE_URL);
        dataSource.setUsername(DATABASE_USERNAME);
        dataSource.setPassword(DATABASE_PASSWORD);


        return dataSource;

    }

    // sessionFactory bean will be available

    @Bean
    public SessionFactory getSessionFactory(DataSource dataSource) {

        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource);

        builder.addProperties(getHibernateProperties());
        builder.scanPackages("net.kzn.shoppingbackend.dto");

        return builder.buildSessionFactory();

    }



    // All the hibernate properties will be returned in this method 
    private Properties getHibernateProperties() {

        Properties properties = new Properties();


        properties.put("hibernate.dialect", DATABASE_DIALECT);      
        properties.put("hibernate.show_sql", "true");
        properties.put("hibernate.format_sql", "true");


        return properties;
    }

    // transactionManager bean
    @Bean
    public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);
        return transactionManager;
    }


}

测试类CategoryTestCase。JAVA

public class CategoryTestCase {

    private static AnnotationConfigApplicationContext context;


    private static CategoryDAO categoryDAO;


    private Category category;


    @BeforeClass
    public static void init() {
        context = new AnnotationConfigApplicationContext();
        context.scan("net.kzn.shoppingbackend");
        context.refresh();
        categoryDAO = (CategoryDAO)context.getBean("categoryDAO");
    }


    @Test
    public void testAddCategory() {

        category = new Category();

        category.setName("Laptop");
        category.setDescription("This is some description for laptop!");
        category.setImageURL("CAT_105.png");

        assertEquals("Successfully added a category inside the table!",true,categoryDAO.add(category));


    }
}

为什么我无法为事务打开Hibernate会话;嵌套异常,似乎一切都很好,为什么我得到这个错误你也可以检查git Hub代码它的相同问题,请帮助我解决这个问题https://github.com/rustyamigo/online-shopping

共有1个答案

闾丘玺
2023-03-14

我克隆了你的项目,发现连接中断:"java.net.ConnectExcema: Connection拒绝:localhost"[90067-194]),你似乎没有启动H2服务器。根据您的URL,您正在使用tcp连接,即服务器必须首先启动。

我有一些谷歌搜索,发现你可以通过两种方法解决它:

你需要一个java主程序,它像这样启动服务器:org.h2.tools.Server.createTcpServer(). start();例如:在你的测试类-

@BeforeClass
public static void init() throws Exception {
    org.h2.tools.Server.createTcpServer().start();
    context = new AnnotationConfigApplicationContext();
    context.scan("net.kzn.shoppingbackend");
    context.refresh();
    productDAO = (ProductDAO)context.getBean("productDAO");
}

或者您可以在尝试连接之前手动启动它,如下所示:java-cph2*。jar组织。h2。工具。服务器

 类似资料:
  • HibernateConfig CategoryDAOImpl 类别 类别测试类 获取此错误 为什么我得到嵌套异常 无法打开事务的Hibernate会话 似乎一切都很好,为什么会出现这个错误? 您也可以检查github代码

  • Spring MVC+Hibernate、JavaConfig WebAppConfig: 用户 HTTP状态500-请求处理失败;嵌套异常为org.springframework.transaction.CanNotCreateTransactionException:无法打开事务的Hibernate会话;嵌套异常为java.lang.NoClassDefoundError:org/hibern

  • 我不熟悉SpringMVC和Hibernate。尝试使用SpringMVC(4.0.3)、Hibernate(4.3.5)和MySQL作为后端创建一个测试web应用程序。 连接到DB没有问题,因为我尝试使用简单的JDBC连接语句从示例testJavaClass中的同一个DB中获取数据,并且能够获取记录。 错误日志: 这是我的pom。xml: Eclipse中的项目结构: servlet上下文。xm

  • 有关您编写的代码问题的问题必须描述特定问题-并且在问题本身中包含有效代码以重现它。有关指导,请参阅SSCCE. org。 在我的应用程序中,我有一个模块,用于在数据库中搜索用户并在jsp内的表中显示他们的信息。我只是在应用程序中设置了Spring Security性。我能够从登录页面连接到数据库,尽管出于某种原因,DAO的CRUD操作(在本例中是搜索)都不起作用。 谢谢,如果我能提供更多信息,请告

  • 我有一个运行完整的Spring MVC应用程序,运行Spring Security,但每当服务器有一段时间不活动,有人试图登录时,我就会出现以下错误: HTTP状态500-请求处理失败;嵌套的异常是org。springframework。交易CannotCreateTransactionException:无法为事务打开Hibernate会话;嵌套的异常是org。冬眠TransactionExce

  • 我正在尝试使用Hibernate保存数据。一切都发生在同一会话中。逻辑如下: 1)开始交易并尝试保存: 2) 如果新记录违反完整性约束,请在外包装方法中捕获异常,打开另一个事务并查询更多数据 问题是当第二个事务执行时query.list它会抛出一个应该与前一个事务链接的异常。 SQLIntegrityConstraintViolationException:ORA-00001:唯一约束 我应该从另