Spring Boot JPA RESTful找不到能够从类型[java.lang.String]转换为类型复合键的转换器
我正在尝试将spring boot应用程序连接到mysql数据库。在我尝试将一个具有嵌入ID的实体映射到另一个具有另一个嵌入ID的实体之前,一切似乎都正常 在这里,我有一个请求表和一个承诺表。一个请求可以有很多承诺 请求(pid、sttime、extime、endtime、minfund、maxfund、status) 请求id具有pid,sttime作为复合键 质押(pid、sttime、extime、endtime、minfund、maxfund、status) 质押id有四个键,pid、sttime、uemail和质押时间,其中pid和sttime都引用了请求Spring Boot JPA RESTful找不到能够从类型[java.lang.String]转换为类型复合键的转换器,java,spring,hibernate,jpa,spring-boot,Java,Spring,Hibernate,Jpa,Spring Boot,我正在尝试将spring boot应用程序连接到mysql数据库。在我尝试将一个具有嵌入ID的实体映射到另一个具有另一个嵌入ID的实体之前,一切似乎都正常 在这里,我有一个请求表和一个承诺表。一个请求可以有很多承诺 请求(pid、sttime、extime、endtime、minfund、maxfund、status) 请求id具有pid,sttime作为复合键 质押(pid、sttime、extime、endtime、minfund、maxfund、status) 质押id有四个键,pid、s
import javax.persistence.*;
import java.util.Collection;
import java.util.Date;
@Entity
public class Request {
@EmbeddedId
private RequestId requestId;
@Temporal(TemporalType.TIMESTAMP)
private Date extime;
@Temporal(TemporalType.TIMESTAMP)
private Date endtime;
private int minfund;
private int maxfund;
@Enumerated(EnumType.STRING)
@Column(name = "status")
private RequestStatus status;
@OneToMany(mappedBy = "pledgeId.request")
private Collection<Pledge> pledges;
protected Request(){}
public Request(RequestId requestId, Date extime, Date endtime, int minfund, int maxfund, RequestStatus status) {
this.requestId = requestId;
this.extime = extime;
this.endtime = endtime;
this.minfund = minfund;
this.maxfund = maxfund;
this.status = status;
}
...
getters and setters
...
@Override
public String toString() {
return String.format(
"Request[pid='%s', sttime='%s', extime='%s', endtime='%s', minfund='%s', maxfund='%s', status='%s']",
requestId.getProject().getPid(), requestId.getSttime(), extime, endtime, minfund, maxfund, status);
}
}
-
我无法查询某个请求的每个承诺。
例如
“未找到能够从[java.lang.String]类型转换为[crowdfunding.entity.RequestId]类型的转换器”
编辑:我还试图重写toString()方法,以便它在暴露时返回一个可以查询自身的API,但似乎不起作用。我相信找不到的转换器是一个用于转换路径参数的REST转换器(此处已解码):
“RequestId{project=1,sttime=2017-04-16 12:00:00.0”
到实际的请求ID
对象。在Spring的REST层中搜索答案,而不是在JPA中@NikosParaskevopoulos感谢您的回复。你打开了我的心扉。你能再给我解释一下吗。我还是有点困惑。我应该创建一个转换器来解析输入吗?这里是答案!!!
import javax.persistence.*;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Date;
@Embeddable
public class RequestId implements Serializable {
// default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "pid")
private Project project;
@Temporal(TemporalType.TIMESTAMP)
private Date sttime;
protected RequestId(){}
public RequestId(Project project, Date sttime) {
this.project = project;
this.sttime = sttime;
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
public Date getSttime() {
return sttime;
}
public void setSttime(Date sttime) {
this.sttime = sttime;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RequestId requestId = (RequestId) o;
if (project != null ? !project.equals(requestId.project) : requestId.project != null) return false;
return sttime != null ? sttime.equals(requestId.sttime) : requestId.sttime == null;
}
@Override
public int hashCode() {
int result = project != null ? project.hashCode() : 0;
result = 31 * result + (sttime != null ? sttime.hashCode() : 0);
return result;
}
// @Override
// public String toString() {
// String timeUrl = "";
// try {
// timeUrl = URLEncoder.encode(sttime.toString(), "UTF-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
//
// String url = "";
// try {
// url = URLEncoder.encode("/search/findRequestByRequestIdProjectAndRequestIdSttime?pid="+project.getPid()+"&sttime="+sttime, "UTF-8");
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
//
// return "/search/findRequestByRequestIdProjectPidAndRequestIdSttime?pid="+project.getPid()+"&sttime="+timeUrl;
//// return url;
// }
@Override
public String toString() {
return "/RequestId{" +
"project=" + project.getPid() +
", sttime=" + sttime.toString() +
'}';
}
}
import javax.persistence.*;
@Entity
public class Pledge {
@EmbeddedId
private PledgeId pledgeId;
@ManyToOne
@JoinColumn(name = "credit_card")
private CreditCard credit_card;
private int amount;
...
constructors
getter & setters
...
}
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Embeddable
public class PledgeId implements Serializable {
private static final long serialVersionUID = 1L;
@MapsId("requestId")
@ManyToOne
@JoinColumns({
@JoinColumn(name = "pid"),
@JoinColumn(name = "sttime")
})
private Request request;
@ManyToOne
@JoinColumn(name = "uemail")
private Customer customer;
@Temporal(TemporalType.TIMESTAMP)
private Date pledgetime;
...
constructors
getter & setters
equals & hashcode
toString
...
}