获取使用休眠在数据库中创建的ID的值

时间:2019-05-20 11:49:50

标签: hibernate jpa

我正在开发一个电子商务网站并与支付网关集成。

在此实施期间,我的应用程序将一些信息发送到支付网关。除了一些订单信息支付网关,还期望我将在应用程序中创建的订单号。

我正在使用休眠序列生成器在数据库中创建订单记录。 现在,我想在插入之前从数据库中获取此订单ID,以便可以将该订单ID发送到付款网关,以将我正在创建的订单与付款网关中的付款交易绑定。

但是我不确定在进入休眠状态之前如何获取自动生成的ID?

这是一个好方法吗,还是我们不应该在插入之前创建一个id?

我正在使用休眠3。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果使用纯休眠模式,则使用y_errors = time_df[['avg_time', 'std_dev']].min(axis=1) fig, ax = plt.subplots(figsize=(16,8)) plt.errorbar(x=time_df['x'], y=time_df['avg_time'], yerr = [y_errors, time_df['std_dev']] ); ax.set_ylabel('average timings (s)') ax.set_xlim(-1, 20) plt.show() 方法;如果使用jpa,则使用org.hibernate.Session.save(entity)方法,将自动在您的实体中设置ID字段。因此,将ID轻松保存到数据库后,您可以获得ID。

但是,如果要在插入前使用序列生成器获取ID,它可能无法正常工作,因为如果其他用户正在执行相同的操作,则生成的ID将相同,这是不安全的。 / p>

答案 1 :(得分:0)

如前所述,在插入数据库之前,您无法从数据库中获取内容。但是您确实可以从Hibernate @Id @GeneratedValue(strategy=IDENTITY)作为整数来获取session.save()。例如。

 public static int addPaymentRecord(String Parameter1, String Parameter2, String Parameter3, int Parameter4, int Parameter5) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        int generatedId = 0;
        try {
            tx = session.beginTransaction();
            PaymentEntity pymnt = new PaymentEntity (parameter1, parameter2, parameter3, parameter4, parameter5);
            generatedId = (Integer) session.save(pymnt);
            tx.commit();
        } catch (HibernateException asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.rollback();
            }
        } finally {
            session.close();
        }
        return generatedId;
    }