MyEntity 是一个带有生成 id 的经典 JPA 实体。我想根据 id 自动将字段 (myStringField) 设置为值。在此示例中,如果 id 为 43,则我\xe2\x80\x99d 喜欢将其设置为 \xe2\x80\x9cfoo43\xe2\x80\x9d。
\n\n由于 id 是由数据库自动生成的,因此在 em.persist(myEntity) 调用之前它为 null。但是在持久化之后,它有一个由Hibernate分配的id(在DB序列上调用NEXTVAL)。所以,我想声明一个 @PostPersist 方法,如下所示:
\n\npackage ...;\n\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.GenerationType;\nimport javax.persistence.Id;\nimport javax.persistence.PostPersist;\n\n\n@Entity\npublic class MyEntity {\n\n @Id @GeneratedValue(strategy = GenerationType.AUTO)\n private Long id;\n\n private String myStringField;\n\n @PostPersist\n public void postPersist(){\n System.out.println("The id = " + id);\n this.myStringField = "foo" + id;\n }\n\n public String getMyStringField() {\n return myStringField;\n }\n ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n下面是一些创建和持久化实体的代码:
\n\npackage ...;\n\nimport javax.persistence.EntityManager;\nimport javax.persistence.PersistenceContext;\n\nimport org.springframework.stereotype.Service;\nimport org.springframework.transaction.annotation.Transactional;\n\n@Transactional\n@Service\npublic class MySpringBean …
Run Code Online (Sandbox Code Playgroud)