Spring Boot一对多单向

时间:2017-09-13 08:45:59

标签: spring jpa

我有实体项目和实体集群。 一个项目可以有多个集群。 我不想要第三个表来保存这种关系。只是项目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;
}   

这给了我错误:必须具有与引用的主键相同的列数。

我该如何解决这个问题?我不明白如何解决这个问题。

2 个答案:

答案 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的属性,这是不可取的。