Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用JPA持久化时,如何将PrimaryKey(使用序列生成)的值分配给另一个变量?_Java_Hibernate_Jpa_Hibernate Mapping - Fatal编程技术网

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,对吗?