同时将休眠对象添加到 MySQL



我是Hibernate新手,正在开发一个servlet,它从URL获取参数,创建一个Hibernate对象,然后将其存储到MySQL数据库中。

我同时发送 1000 个 URL。当我查看MySQL表时,它仅将最后一个对象添加到数据库中。

doGet 方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    //HttpSession session = request.getSession(true);
    //session.putValue("uid", count);
    String id = request.getParameter("id");
    String url = request.getParameter("url");
    String lastVisitTime = request.getParameter("lastVisitTime");
    String visitCount = request.getParameter("visitCount");
    String title = request.getParameter("title");
    String typedCount = request.getParameter("typedCount");
    HistoryItem hi = new HistoryItem(id, url, lastVisitTime, visitCount, title, typedCount);
    File f = new File("C:\Users\atılay\Desktop\apache-tomcat-7.0.30-windows-x64\jspservlets\UserModeling\src\hibernate.cfg.xml");
    SessionFactory sessionFactory = new Configuration().configure(f).buildSessionFactory();
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.save(hi);
    session.getTransaction().commit();
    session.flush();
    session.close();
}

历史项目:

public class HistoryItem {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
private int i;
private String id  = "";
private String url = "";
private String lastVisitTime = "";
private String visitCount = "";
private String title = "";
private String typedCount = "";
}

问题出在哪里?我找不到任何解决方案。

如果要创建要保存到数据库中的对象/实体,则不应设置其ID。

分配ID发生在保存对象时 - 这是Hibernate的责任。已设置 ID 表示 HB 认为对象已保存。

实际上,这不是一个非常好的问题,或者编码风格或示例。

"同时发送 1000 个 URL"。 那是什么意思?您一次打开了 1000 个浏览器,并同时从所有浏览器发送请求?说话有道理。

您的 SessionFactory 应该保存在 webapp 或 servlet 中。此代码正在为每个页面请求执行整个Hibernate启动和初始化。

File f = new File("C:\Users\atılay\Desktop\apache-tomcat-7.0.30-windows-x64\jspservlets\UserModeling\src\hibernate.cfg.xml");
SessionFactory sessionFactory = new Configuration().configure(f).buildSessionFactory();

摆脱"ID"作为参数 - 或者可以选择使用它来加载和编辑记录 - 并正确执行Hibernate设置。

然后,您的项目可能会起作用。

最新更新