在Hibernate中有没有办法在会话中调用@GeneratedValue
之前通过手动设置来跳过生成save
属性的值?
我正在构建一个导入/导出工具,我想保留以前导出的ID。
答案 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
仅在您应用此注释的id
为null
/ 0
时才会应用该策略。
这意味着如果您手动分配了id
字段,那么@GeneratedValue
注释就是USELESS。
答案 3 :(得分:0)
问题是我使用AUTO
的默认(@GeneratedValue
)策略。如果我将其更改为明确指定IDENTITY
,那么它可以正常工作!
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
我真的不明白为什么......: - )