org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@61e3cf4d 已关闭

问题描述 投票:0回答:0

我试图创建一个数据库来使用休眠执行 CRUD 操作。但是无论我在代码中做了多少更改,我都会收到此错误。我是 Hibernate 的新手。所以,请有人帮助我。这是我的代码。

Application.java

package com.hibernate;

import com.hibernate.dao.ProductDao;
import com.hibernate.model.Product;

public class Application {
    public static void main(String args[]) {
        
        Product product = new Product("Mobile", 20000);
        ProductDao productDao = new ProductDao();
        
        productDao.saveProduct(product);
        
        Product product1 = productDao.getProductById(product.getId());
        
        System.out.println(product1.getName()+" saved successfully in the database");
    }

}

道课

package com.hibernate.dao;

import com.hibernate.model.Product;
import com.hibernate.util.*;

import org.hibernate.Session;
import org.hibernate.Transaction;


public class ProductDao {

    //save product
    
    public void saveProduct(Product product) {
        Transaction transaction = null;
        try(Session session = HibernateUtil.getSessionFactory().openSession()) {
            transaction = session.beginTransaction();
            
            session.save(product);
            System.out.println("Product saved successfully");
            
            transaction.commit();
        }catch(Exception e) {
            if(transaction!=null) {
                transaction.rollback();
            }
        }
    }
    //get all products
    //get product by id
    
    public Product getProductById(long id) {
        Transaction transaction = null;
        Product product = null;
        try(Session session = HibernateUtil.getSessionFactory().openSession()) {
            transaction = session.beginTransaction();
            
            product = session.get(Product.class, id);
            
            transaction.commit();
        }catch(Exception e) {
            if(transaction!=null) {
                transaction.rollback();
            }
        }
        return product;
    }
    //update product
    //delete product
    
    
}

应用属性

Properties settings = new Properties();
settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");
settings.put(Environment.URL, "jdbc:mysql://localhost:3306/product?createDatabaseIfNotExists=true");
settings.put(Environment.USER , "root");
settings.put(Environment.PASS, "root");
settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL8Dialect");
settings.put(Environment.SHOW_SQL, "true");
settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
settings.put(Environment.HBM2DDL_AUTO, "create-drop");

这是我遇到的错误。

Exception in thread "main" java.lang.IllegalStateException: org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@61e3cf4d is closed
    at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.errorIfClosed(AbstractLogicalConnectionImplementor.java:37)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:137)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:276)
    at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:121)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:304)
    at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:142)
    at com.hibernate.dao.ProductDao.saveProduct(ProductDao.java:25)
    at com.hibernate.Application.main(Application.java:12)

java mysql hibernate jpa rollback
© www.soinside.com 2019 - 2024. All rights reserved.