我在java中编写一个简单的spring boot应用程序。我想在我的实体模型中添加一个对象列表,但每次出现错误。 有人可以指导我代码应该是什么样的吗? 我也在使用JPA存储库,PostgreSQL数据库和Swagger。
public class Candidate {
@Id
@GeneratedValue
@ApiModelProperty(hidden = true)
@Column(name = "UUID", unique = true, length = Integer.MAX_VALUE)
private Long uuid;
@ManyToMany(cascade=CascadeType.ALL)
//@ElementCollection
private List<CandidateSkills> skills;
}
CandidateSkills列表:
@Entity
@Table(name = "CANDIDATE_TABLE_SKILLS")
public class CandidateSkills {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private long id;
private String skillName;
private int skillLevel;
}
错误: hibernate.PersistentObjectException:传递给persist的分离实体:com.employee.api.models.CandidateSkills
答案 0 :(得分:1)
我不确定你是否需要“多对多”关系,也许“一对多”关系对你有用。
无论如何,如果你想添加“Many To Many”关系,你需要添加另一个表来引用这两个表,但是Spring为你做了:)只是想为那个表定义名称(在这个例子中是“inner_table”) )
您需要在Candidate类的实体字段定义中添加@JoinTable注释,如下所示:
.....
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
name = "inner_table",
joinColumns = {@JoinColumn(name = "candidate_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "candidateSkills_id", referencedColumnName = "id")})
private List<CandidateSkills> skills;
....
并在CandidateSkills类中定义引用,如下所示:
@ManyToMany(mappedBy = "skills")
private List<Candidate> Candidates;
答案 1 :(得分:0)
我找到了解决方案。这非常简单。 的在强> CandidateSkills将@Entity更改为@Embeddable
和强> 在列表中:
@ElementCollection
@CollectionTable(
name="CANDIDATE_SKILLS_TABLE",
joinColumns=@JoinColumn(name="UUID")
)
private List<CandidateSkills> skills;
请访问: https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection