【发布时间】:2020-01-13 12:58:32
【问题描述】:
我有以下实体:
@Entity
@Data
@IdClass(ProjectEmployeeId.class)
public class ProjectEmployee {
@Id
@ManyToOne
private Project project;
@Id
@ManyToOne
private Employee employee;
@ManyToOne
private ProjectEmployeeRole projectEmployeeRole;
}
为上述实体定义复合主键的id类:
@Data
public class ProjectEmployeeId implements Serializable {
private Project project;
private Employee employee;
}
这就是存储库:
public interface ProjectEmployeeRepository
extends CrudRepository<ProjectEmployee, ProjectEmployeeId> {
}
我试图保存一个 projectEmployee:
projectEmployeeRepository.save(projectEmployee);
这给了我以下错误:
Resolved [org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.Long' to required type 'de.employee.Employee' for property 'employee'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.Long' to required type 'de.employee.Employee' for property 'employee': no matching editors or conversion strategy found]
我第一次使用复合主键,所以我不确定它应该如何工作。问题可能来自于定义CrudRepository<ProjectEmployee, ProjectEmployeeId>。第二个参数应该代表 id。但是ProjetEmployee 没有一个主键,而是有两个主键,所以我想我应该将 id 类添加到不起作用的 id 参数中。如何使用带有 CrudRepository 的 IdClass 键保存具有复合主的实体?
【问题讨论】: