我试图在两个具有父表中非主键 id 的表之间形成一对多关系,但我得到了
referencedColumnNames not mapped to a single property.
这是具有一对多关系的数据库表结构。父表有一个复合键(Email, Emp_SSN),它不参与任何关系形成。但是具有唯一约束且Not null的父表EMP_DETAILS的eid映射到子表 MODEL_DETAILS 作为外键。
下面是为子表和父表创建的实体。
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/