使用hibernate @GeneratedValue时手动插入

时间:2017-08-16 13:27:26

标签: java oracle hibernate

我使用hibernate为表自动生成ID,但我需要手动插入与另一个表相关的一些行(大约10k,只需一次)。我使用的是Oracle DB。我怎样才能做到这一点? hibernate如何生成值?有可能使用它吗?

@Id
@GeneratedValue
private Long id;

2 个答案:

答案 0 :(得分:2)

当然可能,我们一直这样做。是否以及如何取决于您使用的ID生成策略以及数据库的设置方式。

我们正在使用生成正ID的(自定义)表生成器,因此每当我们需要手动插入元素时,我们都会使用负id。这样那些ID不会干扰Hibernate的id生成,我们能够立即识别手动插入的行。

如果你不喜欢负面的ids,你可以使用不同的一代策略,例如

  • Hibernate使用的id列上的序列以及手动插入
  • 一个高 - 低表生成器(我们正在使用的),初始低值设置为更高的值,因此基本上保留了手动插入的较低正值)
  • a"已分配" id生成器,即您的应用程序定义了ID(例如员工的员工ID),因此您知道可以手动添加哪些ID

答案 1 :(得分:0)

请参阅@GeneratedValue仅在您调用hibernate API时才有效。

要使用自动增量值,我们不需要hibernate @GeneratedValue功能。

您可以启用自动从数​​据库本身生成。标记列自动生成。

参考:

operating system

插入时,请不要在批量插入包含列名称和值的情况下插入标记为自动增量的列。