当前位置: 首页 > 知识库问答 >
问题:

何时设置带有@GeneratedValue注释的Id?

彭修筠
2023-03-14

何时才能可靠地知道持久性提供程序设置了新创建实体的id字段,该字段带有@generatedvalue注释?

JPA规范对此并不是很具体。我见过类似的问题,但他们得到的答案却不一样,令人困惑。我知道一旦事务被提交,id就已经设置好了,但是如果事务还在运行,而我需要id怎么办呢?

我怎样才能可靠地得到它?

共有1个答案

宋智明
2023-03-14

也许你可以试试这个。调用flush()方法可以将未保存的数据推送到数据库

// Use persist in a transaction
// It doesn't guarantee that the identifier value will be assigned to the persistent instance immediately,
// the assignment might happen at flush time so call the flush method.
public T persist(T obj) {
    entityManager.persist(obj);
    entityManager.flush();
    return obj;
}
 类似资料:
  • 我有一个使用JPA注释生成数据库主键的代码。一个数据库序列用于使用Oracle DB生成PK.Am 现在我对此的理解是:DB sequencer返回的sequence id作为rec_id。这是正确的吗? 医生说: 序列策略序列策略由两部分组成——定义命名序列和在一个或多个类的一个或多个字段中使用命名序列。@Sequence Generator注释用于定义序列并接受名称、初始值(默认值为1)和分配

  • 我正在使用jooq为我的H2 db表生成pojo 但是生成的代码(如下) 缺少@GeneratedValue注释,这使得无法使用spring data rest repository插入新记录,因为传入的对象总是抱怨没有设置id字段。 我可以做什么配置/工作来让jooq正常工作? 下面是我用来在编译时生成pojo的相关pom文件部分: 变通方法 在添加该功能之前,遇到相同问题的任何人都可以选择替换

  • 我可以在lombok中使用@JsonIgnore和@getter注释,而不显式定义getter,因为我必须在序列化对象时使用这个JsonIgnore,但是在反序列化时,JsonIgnore注释必须是ignore,所以对象中的字段不能为空。 我知道,只要在password的getter上定义JsonIgnore就可以防止我的密码被序列化,但为此我必须显式定义我不想要的getter。任何建议,任何帮助

  • 我需要使用两个jackson 2对象映射器。两个映射器都使用同一组类。首先,我需要使用标准序列化。在第二个例子中,我想对所有类使用数组形状类型(请参见https://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonFormat.Shape.html#ARRAY).

  • 问题内容: 我有一个带有生成ID的表,但是在某些情况下,我想自行设置它。我可以以某种方式强制Hibernate忽略@GeneratedValue吗? 问题答案: 可能是一个矫kill过正,但您是否考虑过编写自己的CustomIDGenerator,它的子类可能表示hibernate的AutoGenerator,并提供了一些方法,您可以在其中设置要生成的下一个类对象的ID,例如 这可能会变得复杂,但