您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在多线程应用程序中使用Hibernate?

如何在多线程应用程序中使用Hibernate?

使用每个线程会话对象,只要您不在多个线程之间共享会话对象,就可以了。

您收到的错误与多线程用法或会话管理无关。您session.save()对ID的使用以及明确设置ID都不正确。

没有看到您的映射BlogPost很难分辨,但是如果您告诉Hibernate使用该id字段作为主键,并且您正在使用本机生成器作为主键,那么您要做的就是:

session.beginTransaction();
session.persist(b);
session.flush(); // only needed if flush mode is "manual"
session.getTransaction().commit();

Hibernate将为您填写ID,这persist()将导致插入发生在事务的范围内(save()不关心事务)。如果您的冲洗模式未设置为手动,则您无需致电,flush()因为Transaction.commit()它将为您处理。

请注意,使用时persist(),不保证在刷新会话之前就可以设置BlogPost的ID,这对您在此处的用法非常有用。

要优雅地处理错误

try {
    session.beginTransaction();
    try {
        session.persist(b);
        session.flush(); // only needed if flush mode is "manual"
        session.getTransaction().commit();
    } catch (Exception x) {
        session.getTransaction().rollback();
        // log the error
    }
} catch (Exception x) {
    // log the error
}

顺便说一句,我建议将其设为BlogPost.setId()私有或可见。如果另一个类显式设置ID(再次假定本机生成器和id为主键),则很可能是实现错误

其他 2022/1/1 18:17:25 有733人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶