我试图创建一个数据库来使用休眠执行 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)