同时将Hibernate对象添加到MySQL

时间:2012-10-01 18:36:44

标签: mysql hibernate servlets

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

我正在同时发送1000个网址。当我查看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();

}

HistoryItem:

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 = "";
}

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

1 个答案:

答案 0 :(得分:0)

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

在保存对象时会发生ID分配 - 这是Hibernate的责任。已经设置了ID,意味着HB认为该对象已经被保存。

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

'同时发送1000个网址'。那是什么意思?您一次打开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设置。

然后你的项目可能有用。