java - 我可以单独使用 @GenericGenerator 而不使用 @GenerateValue 吗?

标签 java hibernate

学习java,我还没有看到明确的答案。任何澄清表示赞赏。

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

问题1:我可以单独使用GenericGenerator吗?

问题2:如果我在对象中传入“id”,@GenerateValue 是否仍会生成新的 id 并覆盖传入的 id ?如果是这样,如何保留现有的id,不调用@GenerateValue?

最佳答案

Q1: can i use GenericGenerator alone ?

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

Q2: if i'm passing in "id" in my object, will @GeneratedValue still generated the new id and overwrite the passed in one ? If so, how to keep the existing id, don't call @GeneratedValue ?

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

当您保存一个新实体时,它不会设置id,因此生成器在持久化该实体时将创建一个新实体。当您从数据存储中查询实体时,它将由持久性框架(在本例中为 hibernate)填充。它还将跟踪该实例,以获取您可能想要保存回的实体的任何 future 更新。

关于java - 我可以单独使用 @GenericGenerator 而不使用 @GenerateValue 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55498400/

相关文章:

java - 删除链表中具有给定键的节点

java - 适用于 JOGL + 通用矩阵数学的快速 Java 矩阵库?

hibernate - 改变Hibernate 5命名策略+spring boot+注解

java - ORM 支持不可变类

java - 高效的条件查询仅选择查询的第一个和最后一个结果?

java - bazel run 有效,但构建部署 JAR 由于缺少依赖项而失败

java - 将包装器的 ArrayList 转换为相应的基元数组

java - 使用 Scanner 读取文件

javascript - 如何将 Json 数组传递给 IN 运算符的 JPQLWhere 子句?

java - Hibernate Envers 为外资 OneToMany 关系创建修改字段