使用主键连接表:org.hibernate.mapping.SimpleValue 无法转换为 org.hibernate.mapping.Component

pij*_*cse 2 java hibernate jpa

public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employee_id")
private Integer employeeId;

@Column(name = "doj")
@Temporal(TemporalType.DATE)
private Date doj;

@Column(name = "first_name")
private String firstName;

@Column(name = "last_name")
private String lastName;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.employee")
private Set<EmployeeProject> employeeProject;
// 
Run Code Online (Sandbox Code Playgroud)

项目.java

public class Project implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "project_id")
private Integer projectId;

@Column(name = "exp_end_date")
@Temporal(TemporalType.DATE)
private Date expEndDate;

@Column(name = "project_name")
private String projectName;

@Column(name = "start_date")
@Temporal(TemporalType.DATE)
private Date startDate;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.project")
private Set<EmployeeProject> employeeProject;
Run Code Online (Sandbox Code Playgroud)

员工项目.java

@IdClass(EmployeeProjectPK.class)
public class EmployeeProject implements Serializable {

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

@Id
@Column(name = "PROJECT_ID", insertable = false, updatable = false)
private int projectId;    

@Id
@Column(name = "employee_id", insertable = false, updatable = false)
private int employeeId;    


@ManyToOne
@JoinColumn(name = "employee_id")
private Employee employee;

@ManyToOne
@JoinColumn(name = "project_id")
private Project project;
Run Code Online (Sandbox Code Playgroud)

员工项目PK.Java

public class EmployeeProjectPK implements Serializable {

private static final long serialVersionUID = 1L;
private Integer id;
private Integer projectId;
private Integer employeeId;
Run Code Online (Sandbox Code Playgroud)

基于上述实体设计,当我尝试保留“员工”时,我遇到了以下异常。任何想法?

引起原因:java.lang.ClassCastException:org.hibernate.mapping.SimpleValue无法转换为org.hibernate.mapping.Component

mib*_*iti 6

我认为你的问题是由 Employee 实体映射的

你可以尝试使用吗

@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee")
private Set<EmployeeProject> employeeProject;
Run Code Online (Sandbox Code Playgroud)

代替

@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.employee")
private Set<EmployeeProject> employeeProject;
Run Code Online (Sandbox Code Playgroud)

也尝试在项目实体中更改它并使用

@OneToMany(cascade = CascadeType.ALL, mappedBy = "project")
private Set<EmployeeProject> employeeProject;
Run Code Online (Sandbox Code Playgroud)

代替

@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.project")
private Set<EmployeeProject> employeeProject;
Run Code Online (Sandbox Code Playgroud)

所以最后你应该更换

映射By =“id.project”通过映射By =“项目”

映射者 = "id.employee" by映射者 = "雇员"