【发布时间】:2021-06-27 08:09:46
【问题描述】:
我以这种方式在我的实体结构中使用 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)生成客户 ,并且还会生成一个新用户。这是我的问题:如何在其父级之后保存一个子级?或有没有在不再次保存父母的情况下保存孩子?
【问题讨论】:
-
不要使用继承。数据库不支持继承。也许为客户添加一个字段 user_id。
-
@yuri777 问题与数据库无关。我们不需要在 db 层继承。
-
当然问题不在数据库中。您在数据库中创建了 2 个表:app_user 和 app_customer。并且数据库不包含有关继承的信息。它只是具有相同字段(或几乎相同)的 2 个表。当您创建并保存新用户时,您会将新记录添加到表 app_user。当您创建并保存新客户时,您会在表 app_customer 中创建新记录。并且这些记录有不同的 ID 自动生成。
标签: java hibernate jpa inheritance spring-data-jpa