JPA实体默认构造函数覆盖n-args构造函数



如果存在默认构造函数,则无法通过n-args构造函数初始化实体对象。如果我没有指定默认构造函数,我可以通过POST请求初始化我的对象。然而,由于没有默认的构造函数,我无法获取对象。((

这是我的代码:

@Entity
@Table(name = "result")
public class Result {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@Column(name="term")
private String term;


@Column(name="hitsPerYear")
private int[] hitsPerYear;

@Column(name="year_begin")
private int year_begin;

@Column(name="year_end")
private int year_end;

public Result() {
super();
System.out.println("Default Constructor");
}

public Result(String term, int year_begin, int year_end, String key) {
super();
System.out.println("n-args constructor");
this.term = "Some String to see if it works";
this.year_begin = year_begin;
this.year_end = year_end;
int[] someTestArr = {1,2,3,4}
this.hitsPerYear = someTestArr;
}

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTerm() {
return term;
}
public void setTerm(String term) {
this.term = term;
}

public int[] getHitsPerYear() {
return hitsPerYear;
}

public void setHitsPerYear(int[] hitsPerYear) {
this.hitsPerYear = hitsPerYear;
}

public int getYear_begin() {
return year_begin;
}
public void setYear_begin(int year_begin) {
this.year_begin = year_begin;
}
public int getYear_end() {
return year_end;
}
public void setYear_end(int year_end) {
this.year_end = year_end;
}



}

如果我试图通过POST请求初始化result类型的对象:

{
"term":"hello",
"year_begin":2019,
"year_end":2020,
"key":"scraperapiKey"
}

我得到的回复是:

{
"id": 3,
"term": "hello",
"hitsPerYear": null,
"year_begin": 2019,
"year_end": 2020
}

在java控制台上,我可以看到只调用了默认的构造函数(sysout(。

据我记忆所及,在jpa中,通过n-args构造函数进行初始化总是可能的。这种情况改变了吗?

试试这个:

@JsonCreator
public Result(@JsonProperty("term") String term, @JsonProperty("year_begin") int year_begin, @JsonProperty("year_end") int year_end, @JsonProperty("key") String key) {
this.term = term;
this.year_begin = year_begin;
this.year_end = year_end;
this.key = key;
}

最新更新