我可以不使用@GeneratedValue单独使用@GenericGenerator吗?

时间:2019-04-03 15:05:12

标签: java hibernate

正在学习Java,我还没有一个明确的答案。任何澄清表示赞赏。

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@JsonExclude
private String id;

Q1:我可以单独使用GenericGenerator吗?

Q2:如果我在对象中传递“ id”,@ GeneratedValue是否仍会生成新的ID并覆盖传递的ID?如果是这样,如何保留现有ID,不要调用@GeneratedValue吗?

1 个答案:

答案 0 :(得分:1)

  

Q1:我可以单独使用GenericGenerator吗?

不是。它采用由@GeneratedValue定义的生成器的名称。

  

Q2:如果我在对象中传递“ id”,@ GeneratedValue是否仍会生成新的ID并覆盖传递的ID?如果是这样,如何保留现有ID,不要调用@GeneratedValue吗?

这取决于基础实现。通常,如果对象已经设置了ID,则不会再次生成。但是,您不应自己弄乱ID,而应让EntityManager管理ID。

保存新实体时,它不会设置id,因此生成器在保留实体时会创建一个新实体。当您从数据存储区查询实体时,该实体将由持久性框架填充(在这种情况下为休眠)。它还会跟踪该实例,以查找您将来可能想要保存的对实体的任何更新。