Я пытаюсь создать взаимно-однозначное отношение между двумя сущностями:
Сущность проекта
@Entity
@Table(name = "projects")
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(mappedBy = "project", cascade = CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private CrawlerConfiguration crawlerConfiguration;
// Getters and setters ...
public void setCrawlerConfiguration(CrawlerConfiguration crawlerConfiguration) {
if (crawlerConfiguration == null) {
if (this.crawlerConfiguration != null) {
this.crawlerConfiguration.setProject(null);
}
} else {
crawlerConfiguration.setProject(this);
}
this.crawlerConfiguration = crawlerConfiguration;
}
CrawlerConfigurationсущность
@Entity
@Table(name = "crawler_configurations")
public class CrawlerConfiguration {
@Id
private Long id;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
private Project project;
// Getters and setters ...
}
Когда пользователь создает новый проект, для него также должна быть создана конфигурация.
@Transactional
public Project createProject(Project project) {
project.setCrawlerConfiguration(new CrawlerConfiguration());
return projectRepository.save(project);
}
К сожалению, это приводит к следующему исключению:
javax.persistence.EntityExistsException: Другой объект с тем же значением идентификатора уже был связан с сеансом: [com.github.peterbencze.serritorcloud.model.entity.CrawlerConfiguration # 1]
Как правильно создать сущности?