#java #eclipse #hibernate
Вопрос:
Я пытаюсь создать простую проблему, но когда я пытаюсь получить данные из базы данных, она попадает в исключение:
java.lang.IllegalStateException: org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@3304e14b is closed org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.errorIfClosed(AbstractLogicalConnectionImplementor.java:37) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:135) org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:254) org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:116) org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:294) org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:145) ef.uniceplac.users.dao.ProdutosDAO.getTodosProdutos(ProdutosDAO.java:146) ef.uniceplac.users.controller.ProdutoServlet.listaProdutos(ProdutoServlet.java:94) ef.uniceplac.users.controller.ProdutoServlet.doGet(ProdutoServlet.java:69) javax.servlet.http.HttpServlet.service(HttpServlet.java:655) javax.servlet.http.HttpServlet.service(HttpServlet.java:764) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Я использую:
- Затмение
- Зимовать
- Знаток
Мне удается вводить данные, проблема в том, когда я пытаюсь их получить. Он выполняет команду, но попадает в исключение
Мой класс дао:
public List lt;Produtosgt; getTodosProdutos(){ Transaction transaction = null; List lt;Produtosgt; listaDeProdutos = null; try(Session session = HibernateUtil.getSessionFactory().openSession()){ //começa transação transaction = session.beginTransaction(); //busca todos os produtos listaDeProdutos = session.createQuery("from Produtos ").getResultList(); //commita transação transaction.commit(); }catch(Exception e) { if(transaction != null) { transaction.rollback(); } e.printStackTrace(); } return listaDeProdutos; }
мой гибернатор.cfg.x:
lt;?xml version="1.0" encoding="UTF-8"?gt; lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"gt; lt;hibernate-configurationgt; lt;session-factorygt; lt;!-- Database connection settings --gt; lt;property name="hibernate.connection.driver_class"gt;com.mysql.jdbc.Driverlt;/propertygt; lt;property name="hibernate.connection.url"gt;jdbc:mysql://localhost/formigueilt;/propertygt; lt;property name="hibernate.connection.username"gt;rubensdimasjrlt;/propertygt; lt;property name="hibernate.connection.password"gt;123456lt;/propertygt; lt;!-- Echo all executed SQL to stdout --gt; lt;property name="hibernate.dialect"gt;org.hibernate.dialect.MySQL8Dialectlt;/propertygt; lt;property name="hibernate.show_sql"gt;truelt;/propertygt; lt;property name="hibernate.format_sql"gt;truelt;/propertygt; lt;!-- Mapping files --gt; lt;mapping class="ef.uniceplac.users.dao.ProdutosDAO"/gt; lt;mapping class="ef.uniceplac.users.model.Produtos"/gt; lt;/session-factorygt; lt;/hibernate-configurationgt;
часть сервлета:
private void listaProdutos(HttpServletRequest request, HttpServletResponse response)throws SQLException, IOException, ServletException{ List lt;Produtosgt; listaProdutos = produtosDao.getTodosProdutos(); request.setAttribute("listaProdutos", listaProdutos); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request, response); }
и мой jsp:
lt;c:forEach var="produto" items="${listaProdutos}"gt; lt;div class="row border-bottom"gt; lt;div class="col-1 my-4"gt; lt;div class="figura"gt; lt;img src="lt;c:out value="${produto.linkImagem}" /gt;" alt="lt;c:out value="${produto.titulo}" /gt; class="rounded"gt; lt;/divgt; lt;/divgt; lt;div class="col-5 my-4 d-flex flex-column"gt; lt;span class="fw-bolder fs-5 m-1"gt;lt;c:out value="${produto.titulo}" /gt;lt;/spangt; lt;span class="text-muted fs-6 m-1 text-truncate"gt;${produto.descricao}lt;/spangt; lt;/divgt; lt;div class="col-1 my-4 mx-2 position-relative"gt; lt;div class="col p-2 rounded-pill bg-secondary text-center position-absolute bottom-0 start-0"gt; lt;span class="text-white fs-6 fw-bolder"gt;R$ lt;c:out value="${produto.preco}" /gt;,00lt;/spangt; lt;/divgt; lt;/divgt; lt;div class="col-1 my-4 mx-2 position-relative"gt; lt;div class="col p-2 rounded-pill bg-dark text-center position-absolute bottom-0 start-0"gt; lt;span class="text-white fw-bolder"gt;ID: lt;c:out value="${produto.id}" /gt;lt;/spangt; lt;/divgt; lt;/divgt; lt;div class="col-3 my-4 position-relative"gt; lt;div class="mt-5 icons position-absolute bottom-0 end-0"gt; lt;a href="edita-produto?id=lt;c:out value="${produto.id}" /gt;"gt; lt;i class="fas fa-edit fs-6"gt;lt;/igt; lt;/agt; lt;a href="deleta-produto?id=lt;c:out value="${produto.id}" /gt;"gt; lt;i class="fas fa-trash-alt fs-6 text-danger"gt;lt;/igt; lt;/agt; lt;/divgt; lt;/divgt; lt;/divgt; lt;/c:forEachgt;
Комментарии:
1. Это происходит в блоке catch, по-видимому, при попытке отката, но начальное исключение не отображается, поскольку откат завершается неудачно. Поэтому попробуйте посмотреть, в чем заключается первоначальное исключение
2. Гений!! Я проверил исключение и не сделал конструктор по умолчанию в своем классе, их было два с super();