gpt4 book ai didi

java - 具有相同 id 的一对一映射

转载 作者:行者123 更新时间:2023-11-30 06:21:58 24 4
gpt4 key购买 nike

我有两个实体类:

@Data @Entity
public class MainEntity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer mainId;

@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private SubEntity subEntity;
}

@Data @Entity
public class SubEntity {

@Id
private Integer mainId;
}

我在this answer中找到了这个模式。我以为它可以解决所有问题,但是当我尝试保存填充的 MainEntity 时,我遇到了下一个异常:

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): com.example.demo.SubEntity

我做错了什么?我不想在我的子实体中拥有另一个主键,因为我使用一对一映射。另外,我不需要从 SubEntityMainEntity 的反向链接。

我用来测试它的代码片段:

@Bean
public CommandLineRunner test(MainEntityRepository repo) {
return args -> {
MainEntity main = new MainEntity();
main.setSubEntity(new SubEntity());
repo.save(main);

repo.findAll().forEach(System.out::println);
};
}

您可以在 github 上找到我的示例项目 here .

最佳答案

试试这个:

@Data @Entity
public class MainEntity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer mainId;

@OneToOne(cascade = CascadeType.ALL, mappedBy = "mainEntity", optional = false)
@PrimaryKeyJoinColumn
private SubEntity subEntity;
}

@Data @Entity
public class SubEntity {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer mainId;

@MapsId
@JoinColumn(name = "mainId")
@OneToOne(optional = false)
private MainEntity mainEntity;
}

关于java - 具有相同 id 的一对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47955972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com