![](/img/trans.png)
[英]Error in Hibernate Mapping “A Foreign key refering has the wrong number of column. should be 2”
[英]Hibernate: a foreign key has the wrong number of column. should be 1
我正在尝试 map 到实体 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;
我不知道如何 map 复合外键。 总是得到这个错误:
org.springframework.beans.factory.BeanCreationException:在 class 路径资源 [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
我不确定,但您应该尝试使用 Class 的两个 ID 更改您的 @JoinColumns 结构
@JoinColumns({
@JoinColumn(name = "reportId", insertable = false, updatable = false),
@JoinColumn(name = "reportLookupId", insertable = false, updatable = false)
})
抱歉,您不能添加两个具有相同名称的列,如果您想在ReportLookup
表中添加一个reportId
并在报告表中添加ReportLookup
,请在ReportLookup
中删除第二个@JoinColumn
:
@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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.