【发布时间】:2021-04-04 03:22:53
【问题描述】:
我有两个实体。
@Entity
public class Parent {
@Id
private UUID id;
private String someValue;
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "child_id", referencedColumnName = "id")
private Child child;
}
@Entity
public class Child {
@Id
@GeneratedValue
private UUID id;
private String someVariable;
private Integer someValue;
}
并且实体持久化逻辑非常简单:
@Override
public ParentDto create(ParentDto parentDto) {
if (repository.existsById(parentDto.getId())){
throw new ParentWithIdAlreadyExistsException(parentDto.getId());
}
return mapper.toDto(repository.save(mapper.toDomain(parentDto)));
}
但是当我尝试持久化父实体时 - 休眠抛出异常
嵌套异常是 org.springframework.orm.jpa.JpaObjectRetrievalFailureException:无法 找到带有 id 的 .child 6d387565-0e7c-4b0d-85ba-c21cdbb39871;嵌套异常是 javax.persistence.EntityNotFoundException:无法找到 .ID 为 6d387565-0e7c-4b0d-85ba-c21cdbb39871 的孩子] 根本原因
为什么 hibernate 试图在数据库中查找子实体而不是创建它?
【问题讨论】:
-
我们可以得出
Parent.id应该等于Child.id的结论。那么,你为什么用@GeneratedValue代替Child?我想它应该被删除。请说明您如何持久化实体。 -
我更新了我的问题。往上看
-
请同时显示
mapper.toDomain方法。
标签: java spring-boot hibernate spring-mvc spring-data-jpa