小编Jul*_*tte的帖子

@PostPersist 中修改的字段不会在数据库中更新

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\n
package ...;\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\n
package ...;\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)

hibernate jpa

6
推荐指数
1
解决办法
5682
查看次数

标签 统计

hibernate ×1

jpa ×1