我正在开发一个电子商务网站并与支付网关集成。
在此实施期间,我的应用程序将一些信息发送到支付网关。除了一些订单信息支付网关,还期望我将在应用程序中创建的订单号。
我正在使用休眠序列生成器在数据库中创建订单记录。 现在,我想在插入之前从数据库中获取此订单ID,以便可以将该订单ID发送到付款网关,以将我正在创建的订单与付款网关中的付款交易绑定。
但是我不确定在进入休眠状态之前如何获取自动生成的ID?
这是一个好方法吗,还是我们不应该在插入之前创建一个id?
我正在使用休眠3。
谢谢。
答案 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;
}