应坚持一对多的关系我有一个叫jobprofile类,它包含以下一对多关系:在Spring数据休息
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "profile")
private List<JobLanguageProficiency> jobLanguageProficiency;
引用的类“JobLanguageProficiency”看起来是这样的:
package ch.alv.jobmatch.entity.aux;
import ch.alv.jobmatch.entity.job.Jobprofile;
import javax.persistence.*;
@Entity
@Table(name = "job_language_proficiency")
public class JobLanguageProficiency {
@Id
private int id;
@ManyToOne
@JoinColumn(name = "jobprofile_jobprofile_id")
private Jobprofile profile;
@OneToOne
private Languages languages;
@OneToOne
private LangProficiency langProficiency;
public Languages getLanguages() {
return languages;
}
public void setLanguages(Languages languages) {
this.languages = languages;
}
public LangProficiency getLangProficiency() {
return langProficiency;
}
public void setLangProficiency(LangProficiency langProficiency) {
this.langProficiency = langProficiency;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Jobprofile getProfile() {
return profile;
}
public void setProfile(Jobprofile profile) {
this.profile = profile;
}
}
基本上,它只包含两种对一种语言的引用,以及对它的熟练程度。
当我尝试创建/保留作业配置文件时,只要尝试将语言数据插入到数据库中,就会失败。
这是错误:
Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException:
Could not write content: (was java.lang.NullPointerException) (through reference chain: org.springframework.data.rest.webmvc.json.["content"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: org.springframework.data.rest.webmvc.json.["content"])
我怀疑错误的根源在于JSON,因为一对多关系完美的作品,当我手动插入数据。
的JSON的相关部分看起来是这样的:
job_language_proficiency: Array[1]
0: Object
languages: "http://localhost:9000/api/languages/de"
proficiency_code: "http://localhost:9000/api/langproficiency/C1"
任何想法,为什么这不起作用?
LangProficiency实体:
package ch.alv.jobmatch.entity.aux;
import javax.persistence.*;
@Entity
@Table(name = "LangProficiency")
public class LangProficiency {
@Id
@Column(name = "proficiency_code")
private String proficiency_code;
private String description_de;
private String description_fr;
private String description_it;
private String description_en;
public String getProficiency_code() {
return proficiency_code;
}
public void setProficiency_code(String proficiency_code) {
this.proficiency_code = proficiency_code;
}
public String getDescription_de() {
return description_de;
}
public void setDescription_de(String description_de) {
this.description_de = description_de;
}
public String getDescription_fr() {
return description_fr;
}
public void setDescription_fr(String description_fr) {
this.description_fr = description_fr;
}
public String getDescription_it() {
return description_it;
}
public void setDescription_it(String description_it) {
this.description_it = description_it;
}
public String getDescription_en() { return description_en; }
public void setDescription_en(String description_en) { this.description_en = description_en; }
}
语言实体:
package ch.alv.jobmatch.entity.aux;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "Languages")
public class Languages implements Serializable {
@Id
@Column(name = "languages")
private String languages;
private String description_de;
private String description_fr;
private String description_it;
private String description_en;
public String getLanguages() {
return languages;
}
public void setLanguages(String languages) {
this.languages = languages;
}
public String getDescription_de() {
return description_de;
}
public void setDescription_de(String description_de) {
this.description_de = description_de;
}
public String getDescription_fr() {
return description_fr;
}
public void setDescription_fr(String description_fr) {
this.description_fr = description_fr;
}
public String getDescription_it() {
return description_it;
}
public void setDescription_it(String description_it) {
this.description_it = description_it;
}
public String getDescription_en() { return description_en; }
public void setDescription_en(String description_en) { this.description_en = description_en; }
}
语言似乎是在您的映射中的对象,但它显示为您的JSON中的字符串。 – TheBakker
您是否尝试将两个实体的ID更改为Long。假设你需要一个'long'类型的id来支持Spring数据。 [链接](https://examples.javacodegeeks.com/enterprise-java/spring/spring-data-rest-example/) –
@TheBakker据我所知,使用链接也应该工作。在JSON中实现完整的对象对于这种特定的情况是非常不切实际的。 –