0

我是 Hibernate 新手,正在开发一个从 URL 获取参数的 servlet,创建一个 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 = "";
}

问题是什么?我找不到任何解决方案。

4

1 回答 1

0

如果您正在创建要保存到数据库中的对象/实体,则不应设置它的 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 设置。

那么你的项目可能会奏效。

于 2012-10-02T02:52:05.440 回答