java - 在映射到非主键 Spring JPA 期间,referencedColumnNames 未映射到单个属性错误

标签 java spring-boot hibernate spring-data-jpa

我试图在两个具有父表中非主键 id 的表之间形成一对多关系,但我得到了

referencedColumnNames not mapped to a single property.

这是具有一对多关系的数据库表结构。父表有一个复合键(Email, Emp_SSN),它不参与任何关系形成。但是具有唯一约束Not null的父表EMP_DETAILSeid映射到子表 MODEL_DETAILS 作为外键。

enter image description here

下面是为子表和父表创建的实体。

EmpDetails.java

@Table(EMP_DETAILS)
@Entity
public class EmpDetails{

 @EmbeddedId
 private EmpDetailsIdentity empIdentity;

 @Id
 @Column(name="eid", nullable=false)
 private Integer eid;

 @OneToMany(cascade=CascadeType.ALL, mappedBy="empDetails"
 private Set<ModelDetails> modelDetailsSet;

 //other column mappings
}

ModelDetails.java

@Table(MODEL_DETAILS)
@Entity
public class ModelDetails{

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

  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(referencedColumnName="eid", nullable=false)
  private EmpDetails empDetails;

  //Other column mappings and getters setters

}

EmpDetailsIdentity.java

@Embeddable
public class EmpDetailsIdentity{
 @Column(name="email") 
 private String email;

 @Column(name="emp_ssn") 
 private String empSsn;

  //getters and setters
}

我不知道我错过了什么以及在哪里!有人可以帮忙吗?

最佳答案

根据@Kawu的建议,我删除了@EmbeddedId并删除了EmpDetailsIdentity。当我们不使用 Embeddable 进行任何关系映射时,删除 embeddedId 确实有意义。将列映射从 EmpDetailsIdentity 转移到 EmpDetails。工作EmpDetails如下所示,

@Table(EMP_DETAILS)
@Entity
public class EmpDetails{

 @Id
 @Column(name="eid", nullable=false)
 private Integer eid;

 @OneToMany(cascade=CascadeType.ALL, mappedBy="empDetails"
 private Set<ModelDetails> modelDetailsSet;

 @Column(name="email") 
 private String email;

 @Column(name="emp_ssn") 
 private String empSsn;
}

这对我有用!谢谢@Kawu。

关于java - 在映射到非主键 Spring JPA 期间,referencedColumnNames 未映射到单个属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62219344/

相关文章:

java - Spring XML 模式中的错误 "No setter found for property ' oAuth2RequestValidator'"

java - JScrollPane 和 JList 自动滚动

java - 从外部 jar 中包含 Spring 上下文找不到服务

java - 如何使用 jhat 分析堆转储

双插槽处理器之间的 Java 线程迁移

java - 如何使用GroovyShell传递JVM参数和脚本参数?

java - 使用gradle在可执行jar生成中使用JSP进行Spring Boot

java - 获取 Hibernate 异常 : org. hibernate.QueryException:无法解析属性

Hibernate 将 enum 映射到 varchar

java - 如何为多对多关联编写 HQL 查询?