我有实体项目和实体集群。 一个项目可以有多个集群。 我不想要第三个表来保存这种关系。只是项目ID保存到群集。
这是我的项目实体:
@Entity
@Table(name = "Project")
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String projectName;
@OneToMany
@JoinTable(name = "cluster")
private Set<Cluster> clusters;
}
这是我的群集实体
@Entity
@Table(name = "Cluster")
public class Cluster {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String team;
private String concept;
}
这给了我错误:必须具有与引用的主键相同的列数。
我该如何解决这个问题?我不明白如何解决这个问题。
答案 0 :(得分:3)
使用@JoinColumn
代替@JoinTable
public class Project {
//...
@OneToMany
@JoinColumn(name="PROJECT_ID", referencedColumnName="id")
private Set<Cluster> clusters;
并将PROJECT_ID列添加到群集实体。
public class Cluster {
//...
@Column(name = "PROJECT_ID")
private Integer projectId;
答案 1 :(得分:1)
如果我错了,请纠正我,但就我所知的软件工程而言,你想做什么是不可能做到的:你不能存在关系,只能存在于第三个表中。列表,集合,地图等必须以这种方式存储。
否则,在您的情况下,您将为关系的每个群集复制Project的属性,这是不可取的。