Java 在使用JPA持久化时,如何将PrimaryKey(使用序列生成)的值分配给另一个变量?
我已经实现了一个定制的基于序列的生成器,它生成实体的主键。我希望在持久化实体时将相同的值分配给另一个成员变量。还有其他方法可以做到吗?您可以使用Java 在使用JPA持久化时,如何将PrimaryKey(使用序列生成)的值分配给另一个变量?,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,我已经实现了一个定制的基于序列的生成器,它生成实体的主键。我希望在持久化实体时将相同的值分配给另一个成员变量。还有其他方法可以做到吗?您可以使用@PostPersist带注释的方法。为了简单起见,让我使用一个自动生成的id @Entity @Table(name = "PERSON") class Person { @Id @GeneratedValue private Long id; private Long idDup; // Getters
@PostPersist
带注释的方法。为了简单起见,让我使用一个自动生成的id
@Entity
@Table(name = "PERSON")
class Person {
@Id
@GeneratedValue
private Long id;
private Long idDup;
// Getters and setters removed for brevity
@PostPersist
public void perPersist() {
this.idDup = id;
}
}
从文件中:
@PostPersist在实体管理器持久化操作实际完成后执行
执行或级联。此调用在数据库插入后调用
被执行
请注意,
@PostPersist
是一个JPA注释,因此可以用于所有提供者。实际上,其他成员变量也是表中的一列。我希望它们都以相同的值持久化。是的,在上面的示例中,idDup
是PERSON
表的一列。不是吗?对不起,我还有一个疑问。文档说明@PostPersist是在调用database inserted之后执行的。那么这两列在数据库中如何具有相同的值呢?:)这是因为在持久化之后,您正在更新此上的成员,此是一个托管实体。我尝试了您的建议,但另一列没有使用Id的值进行更新。类本身用@Transaction注释,所以以后不需要执行entitymanager.flush,对吗?