首页 > 解决方案 > 休眠继承在父母之后保存孩子

问题描述

我以这种方式在我的实体结构中使用Joined Hibernate Inheritance Mapping :

@Getter
@Setter
@Entity
@Table(name= "app_user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    //some other fields
}



@Getter
@Setter
@Entity
@Table(name= "app_customer")
public class Customer extends User {
    //some other fields
}

我想先保存一个用户,然后在另一个 api 中保存一个客户并将该客户映射到第一个用户。因此,我尝试以这种方式使用现有用户 ID保存新客户:

User user = ... //find already saved user
Customer customer = new Customer();
customer.setId(user.getId());
...
customerRepository.save()

但是,hibernate使用新生成的 id(而不是固定传递的 id)生成客户,并且还生成一个新用户。这是我的问题:我怎样才能在父母之后拯救孩子?或者有没有在不再次拯救父母的情况下拯救孩子?

标签: javahibernatejpainheritancespring-data-jpa

解决方案


尝试更改第二个实体:

@Getter
@Setter
@Entity
@Table(name= "app_customer")
public class Customer{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @OneToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    User user;

    //some other fields
}

推荐阅读