当前位置: 首页 > 知识库问答 >
问题:

hibernate继承在父级之后保存子级

万俟光临
2023-03-14

我以这种方式在实体结构中使用Joined Hibernate继承映射:

@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)生成客户,并生成一个新用户。我的问题是:我怎样才能在孩子的父母之后救他?还是反正又有没有救孩子不救父母?

共有1个答案

边翔宇
2023-03-14

尝试更改第二个实体:

@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
}
 类似资料:
  • 问题内容: 我该如何继承其父代的样式和javascript。 我努力了 但是,它会删除标签。此外,我看不到影响iframe的样式。 我是否有更好/其他的方法来解决这个问题?谢谢。 问题答案: 您可以通过在iframe中使用以下代码来“继承”父级的CSS: 在IE,Chrome和Firefox中对我来说效果很好。 关于JavaScript,我找不到直接将父JavaScript添加到iframe中的方

  • 当我读到cascade和inverse时,有人说它们都在做完全不同的事情。级联:在级联中,在一个操作(保存、更新和删除)完成后,它决定是否需要调用其他操作(保存、更新和删除)对其他相互有关系的实体。反向:这用于决定哪一方是管理关系的关系所有者(插入或更新外键列)。 假设我保存有一些孩子的父级。所以当我一方面用inverse="true"cascade="all"设置一对多时,我希望孩子是关系的所有

  • 问题内容: 目前,我有这样的结构: 它使用联接表与每个子类一个表映射。由于历史原因,我也使用了一个鉴别器,因此当前情况如《 Hibernate手册》第9.1.3节所述 。 问题: 如何为这样的结构扩展映射: 我可以在hibernate映射中吗?什么我需要S’ 问题答案: 未测试, 但根据发布的链接(如果您使用的是hibernate3)

  • 我看了很多关于这个主题的帖子,但一直无法解决它=( 我正在尝试保存具有一对多关系的父级及其子级。我相信我正在遵循其他帖子中的留档和其他建议。然而,我遇到的问题是,当Hibernate尝试保存子记录时,它在父级中插入FK的“0”,而不是真正的id。 父hbm。xml映射 孩子hbm。xml映射 保存对象的Java代码 因此,它将用正确的id(下一个seq值,比如273)保存父对象,但当它去尝试保存子

  • 我将JPA与Hibernate一起使用。我有一个1对1的父子关系(子是可选的),两者之间共享id,子表上有一个外键关系。我的实体如下所示: