手动设置自动生成的id属性

时间:2016-10-17 10:37:10

标签: java mysql hibernate

在Hibernate中有没有办法在会话中调用@GeneratedValue之前通过手动设置来跳过生成save属性的值?

我正在构建一个导入/导出工具,我想保留以前导出的ID。

4 个答案:

答案 0 :(得分:2)

重要的是,如果你这样使用:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

如果您没有在数据库中设置的ID,它将忽略您的ID集,数据库将创建一个新ID。我的意思是,如果你有一个空数据库并设置user.setId(100L)并保存,当你在数据库中找到它时,service.findById(100L)将找不到任何对象。

答案 1 :(得分:0)

默认情况下,如果Hibernate已经设置,它将不会覆盖值,因此一切都应该按预期工作。只要确保你没有使用AUTO。

如果您需要更复杂的逻辑,请查看@GenericGenerator。 https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-identifier

答案 2 :(得分:0)

@GeneratedValue仅在您应用此注释的idnull / 0时才会应用该策略。

这意味着如果您手动分配了id字段,那么@GeneratedValue注释就是USELESS。

答案 3 :(得分:0)

问题是我使用AUTO的默认(@GeneratedValue)策略。如果我将其更改为明确指定IDENTITY,那么它可以正常工作!

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

我真的不明白为什么......: - )