簡體   English   中英

Hibernate:外鍵的列數錯誤。 應該是 1

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM