java - 在 mysql 中使用休眠
问题描述
我按照本教程mykong来使用休眠和 mysql。
我的问题是,当我启动程序时,我得到了这个异常org.hibernate.TransactionException: Transaction not successfully started"。
所以我尝试使用session.persist(Object)
andsession.flush()
而不是session.save(Object)
and session.getTransaction().commit()
。现在我没有得到任何异常,但对象没有保存在数据库中。日志显示请求
休眠:插入库存(STOCK_CODE,STOCK_NAME)值(?,?)
有人可以帮我吗?
session = HibernateUtil.getSessionFactory().openSession();
Stock stock = new Stock();
stock.setStockCode("4715");
stock.setStockName("GENM");
session.persist(stock);
session.flush();
session.getTransaction().commit();
session.close();
解决方案
你正在尝试提交一个你甚至还没有开始的事务,因为你错过了
session.beginTransaction();
在你的代码中。
根据上面的网站,您必须启动一个会话,然后在会话中启动事务,进行编辑,将编辑的对象保存到会话中,然后提交事务。您的刷新也会导致问题,因为您在保存或提交之前刷新会话。
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Stock stock = new Stock();
stock.setStockCode("4715");
stock.setStockName("GENM");
session.save(stock);
session.getTransaction().commit();
推荐阅读
- rust - 数组变量上的向量宏?
- bash - awk 命令填补日期列表中的空白
- c# - 使用 LINQ 对 Xelement 进行排序时遇到问题
- kubernetes - dial tcp IP:80: connect: operation timed out
- reactjs - 样式化组件 + 故事书:当我传递新样式时,SVG 图标不会重新渲染
- ruby-on-rails - Simple_Form 重新加载时自动禁用输入
- docker - 如何将 dotnet 工具传递给 docker
- html - Django X 可编辑
- c# - EF Core 5 中的一对一关系
- sql - Oracle SQL 创建或替换带有/不带有列名的视图