java - Hibernate:外键的列数错误。应该是 1
问题描述
我正在尝试映射到实体 Report 和 ReportLookup:
@Entity
public class Report extends AbstractMigrationObject implements Serializable {
@JsonIgnore
@Id
private Long reportId;
private String reportName;
private String appName;
private Integer reportNum;
private String issue;
@JsonProperty
@OneToMany(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "reportName"),
@JoinColumn(name = "appName"),
})
private Set<ReportLookup> lookupSet;
@Entity
public class ReportLookup implements Serializable {
@JsonIgnore
@Id
private Long reportLookupId;
private String parameterName;
private String attributeName;
private String lookupName;
private Integer sequence;
private String labelOverride;
private String defaultValue;
private Integer required;
private Integer hidden;
private String reportName;
private String operator;
private Integer multiLookup;
private Integer reportNum;
private String appName;
@ManyToOne
@JoinColumns({
@JoinColumn(name = "appName", insertable = false, updatable = false),
@JoinColumn(name = "reportName", insertable = false, updatable = false)
})
private Report report;
我不知道如何映射复合外键。总是得到这个错误:
org.springframework.beans.factory.BeanCreationException:创建类路径资源[persistance-context.xml]中定义的名称为“entityManagerFactory”的bean时出错:调用init方法失败;嵌套异常是 org.hibernate.AnnotationException: A Foreign key refering ru.ocrv.ekasui.changemonitoring.maximo.entity.report.Report from ru.ocrv.ekasui.changemonitoring.maximo.entity.report.ReportLookup 的列数错误. 应该是 1
解决方案
reportId
抱歉,如果您想在ReportLookup
表中添加一个并ReportLookup
在报告表中删除第二个@JoinColumn
,则不能添加两个具有相同名称的列 ReportLookup
:
@ManyToOne
@JoinColumns({
@JoinColumn(name = "appName", insertable = false, updatable = false)
})
private Report report;
并在报告中:
@OneToMany(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "reportName")
})
private Set<ReportLookup> lookupSet;
第二种解决方案 ,您应该在主体实体中添加 @JoinColumns
@JsonProperty
@OneToMany(fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "reportName"),
@JoinColumn(name = "appName"),
})
private Set<ReportLookup> lookupSet;
推荐阅读
- python - 用其他行的数据填充空值
- r - pddl 错误:持续动作声明中的语法错误
- php - Symfony easyadmin ERR_TOO_MANY_REDIRECTS 在生产服务器上
- javascript - 如何在不关闭 JavaScript 页面的情况下单击空格来暂停视频
- c# - 为每个页面共享 ViewModel 数据,同时为不同的视图重用单个 ViewModel
- javascript - 我在 javascript 中的基本项目有问题
- python - 改变数据框,就像每一行只包含一个值,其余为 0
- authentication - 将一个 keycloak 领域设置为其他 keycloak 领域的 Idp
- algorithm - 如何检查算法范式是否可以解决某种类型的问题?
- python - 在 Python 中分隔坐标列表时出错