如何在JPA中映射相同类型的两个实体
我有一个案例,我需要在计算机硬件部件之间创建一个兼容性映射 其目的是检查ComputerPart1(主板)是否与ComputerPart1(硬盘)兼容 所以我有一个叫做ComputerPart的实体如何在JPA中映射相同类型的两个实体,jpa,spring-data-jpa,many-to-many,Jpa,Spring Data Jpa,Many To Many,我有一个案例,我需要在计算机硬件部件之间创建一个兼容性映射 其目的是检查ComputerPart1(主板)是否与ComputerPart1(硬盘)兼容 所以我有一个叫做ComputerPart的实体 @Entity public class ComputerPart { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false)
@Entity
public class ComputerPart {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false, unique = true)
private String serialNumber;
@Column(nullable = false)
private String manufacturer;
// getter and setters
我不确定下一步该怎么做
我是否使用列表创建computerParts的对象映射
Map<ComputerPart, List<ComputerPart>>
您可以按照建议使用
@ManyToMany
。联接表和列可以是您想要的任何内容。正如您所提到的(这是推荐的解决方案),您还可以使用@OneToMany
创建第三实体兼容性和映射。关于避免@manytomy
,请进一步查看:嗨,艾伦,谢谢你的回复。很高兴知道多对多不是首选。那么基本上每个实体(ComputerPart和ComputerPartCompatible)都有一个@OneToMany到另一个实体?
@Entity
public class ComputerPart {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false, unique = true)
private String serialNumber;
@Column(nullable = false)
private String manufacturer;
@Column(nullable = false)
private String manufacturer;
// What @Annotation to put here?
//is it @ManyToMany ?
Set<ComputerPart> compatibles;
@ManyToMany(targetEntity = ComputerPart.class, fetch = FetchType.LAZY)
@JoinTable(name = "??", joinColumns = {
@JoinColumn(name = "??", referencedColumnName = "??")},
inverseJoinColumns = {
@JoinColumn(name = "??", referencedColumnName = "??")})