使用jpa和hibernate在多对多关系中实现额外的列时,我一直遇到一些困难。
我已经尝试了很多次,但是没有成功。使事情起作用的唯一方法是建立简单的多对多关系,没有多余的列,也没有创建新的实体。我在下面给出的代码可以正常工作,但其中不包含所需的额外实体“ CandidateLanguage”,因此我可以添加额外的属性。
//CANDIDATE CLASS
//imports
@Entity
@Table(name="candidates")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdat", "updatedat"}, allowGetters =
true)
public class Candidate {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String fullname;
private String address;
private String birthdate;
private String placeofbirth;
private String hobbies;
private String presentation;
private int yearsofexperience;
@Column(nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
@CreatedDate
private Date createdat;
@Column(nullable =false)
@Temporal(TemporalType.TIMESTAMP)
@LastModifiedDate
private Date updatedat;
public Candidate(String fullname, String address, String birthdate, String placeofbirth, String hobbies, String presentation, int yearsofexperience) {
this.fullname = fullname;
this.address = address;
this.birthdate = birthdate;
this.placeofbirth = placeofbirth;
this.hobbies = hobbies;
this.presentation = presentation;
this.yearsofexperience = yearsofexperience;
}
@ManyToMany(fetch = FetchType.EAGER,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "candidate_languages",
joinColumns = { @JoinColumn(name = "candidate_id") },
inverseJoinColumns = { @JoinColumn(name = "language_id") })
private Set<Language> languages = new HashSet<>();
//getters and setters
//LANGUAGE CLASS
//imports
@Entity
@Table(name="languages")
@EntityListeners(AuditingEntityListener.class)
public class Language {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NaturalId
private String idiom;
@ManyToMany(fetch = FetchType.EAGER,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
},
mappedBy = "languages")
private Set<Candidate> candidates = new HashSet<>();
public Language() {
}
public Language(String idiom) {
this.idiom = idiom;
}
//getters and setters
目标是保留另一个称为“写作”的列,该列是就语言知识而言的技能级别,并且级别为“ C1”,“ C2”,“ B1”,“ B2”,“ A1”,“ A2” ”和“本机”(也许是枚举?)。 预先感谢!