我正在尝试了解一对一映射类的 JPA Spring Boot 实现,并希望是否有人可以为我提供清晰的图片。
- 一对一映射场景:表 foo 和表 childfoo Foo 具有列 foo_id,foo_name, foo_place childfoo 具有列 foo_id(foo 表的外键), childfoo_name
这是我到目前为止所做的 JPA 实体实现:
@Entity
@Data
@Table(name = "foo")
public class foo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "foo_id")
private Integer fooId;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name="fooId")
private ChildFoo childFoo;
}
ChildFoo 类
@Entity
@Data
@NoArgsConstructor
@EqualsAndHashCode(exclude ="foo")
@Table(name = "childfoo")
public class Childfoo implements Serializable {
/**
*
*/
private static final long serialVersionUID = -8142203085486540150L;
@Id
private Integer fooId;
@OneToOne(cascade = CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn(name = "foo_id", referencedColumnName = "fooId")
private Foo foo;
@Column(name="child_name")
private String childName;
}
我已经为 Foo 创建了一个存储库,并
FooRepository.save(foo)
在控制器中使用它来保存数据。
添加 foo 和 childfoo 的控制器代码:
Foo foo = new Foo();
foo.set...
ChildFoo childFoo = new ChildFoo();
childFoo.setChildName("abc");
childFoo.setFoo(foo);
foo.setChildFoo(childFoo);
fooRepository.save(foo);
但我收到错误:
必须在调用 save() 之前手动分配此类的 ID。