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;
//
项目.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;
EmployeeProject.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;
EmployeeProjectPK.Java
public class EmployeeProjectPK implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private Integer projectId;
private Integer employeeId;
基于上述实体设计,当我尝试保留“员工”时,出现以下异常。任何想法?
Caused by: java.lang.ClassCastException: org.hibernate.mapping.SimpleValue cannot be cast to org.hibernate.mapping.Component
最佳答案
我认为您的问题在 Employee 实体中映射
您可以尝试使用
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee")
private Set<EmployeeProject> employeeProject;
而不是
@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.employee")
private Set<EmployeeProject> employeeProject;
也尝试在项目实体中更改它并使用
@OneToMany(cascade = CascadeType.ALL, mappedBy = "project")
private Set<EmployeeProject> employeeProject;
而不是
@OneToMany(cascade = CascadeType.ALL, mappedBy = "id.project")
private Set<EmployeeProject> employeeProject;
So finally you should replace
mappedBy = "id.project" by mappedBy = "project"
AND
mappedBy = "id.employee" by mappedBy = "employee"
关于java - 使用主键 : org. 连接表 hibernate.mapping.SimpleValue 无法转换为 org.hibernate.mapping.Component,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42584532/