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

标签 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;
// 

项目.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/

相关文章:

java - Swing 自定义组件

java - Eclipse Gradle 插件 : <some pom file> cannot be read or is not a valid ZIP file

java - Hibernate + MySQL简单批量插入极慢

mysql - 通过 JPA 从 MySQL 获取给定行的行号

java - HIbernate 不能用外键删除实体。外键设置为空

Java 8 + Swing : Modal Dialog Theory

java - 尝试从 bash 运行BehaviorSpace 实验时出错

java - Hibernate 在每次插入之前选择标识列值

在生产中 hibernate 超音速?

java - JPA/Hibernate : Sub-typing vs. 策略 'pattern'