1

这是我的问题:

我有 2 个表 A 和 B。我需要通过使用 hibernate jpa 实体管理器来解决以下问题。

在一个请求中,我正在发送数据。首先,我需要在表 A 中插入一行,其中一个 id 将由序列生成器(这是一个主键)生成。然后在表 b 中,我需要插入在请求中发送的数据,上面生成的主键将作为表 B 中的外键。

4

1 回答 1

1

正如 acdcjunior 所说,您可以通过一笔交易来做到这一点。Hibernate 会话等待执行 DML,直到会话提交(因此它可以重新排序 SQL 操作),但您可以告诉它继续执行到目前为止的所有内容。当第一次插入执行时,将为您生成序列号。

如果在保存 A 后在当前会话上调用 flush,这将导致在数据库上执行 A 的插入 SQL(不提交事务)。然后 Hibernate 将使用生成的键值填充 A 实体上的键字段,您可以使用它来填充 B 实体上的 FK 字段。

如果您想避免仅仅为了获取序列号而返回数据库(如果您有很多插入,这可能会变慢),那么您可能需要切换到不同的序列生成器,例如 hilo 序列生成器,它将为您预先分配序列号。

于 2013-09-10T14:06:19.140 回答