带有@EmbeddedId 和单向@OneToMany 的外键和错误的列数

问题描述

我有一个关于带有 @EmbeddedId 的 @OneToMany 的问题。 这是错误: 从 ch.xxx.sp_model.sustainability.model.flows.flow.FlowTemplate 引用 ch.xxx.sp_model.sustainability.model.processes.ProcessTemplate 的外键具有错误的列数。应该是 2 这些是我的课程: 1.带有复合Key的流程模板:

@Data
@Entity
public class ProcessTemplate {
    @EmbeddedId
    private ProcessTemplateId id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "fk_referenced_flow_base",referencedColumnName = "id")
    private FlowBase referenceProduct;

    @ManyToOne
    @JoinColumn(name = "fk_process_base",referencedColumnName = "id")
    private ProcessBase processBase;

    @OneToMany
    @JoinColumn(name="processTemplate")
    private Set<FlowTemplate> flowsTemplate;

//    @OneToMany
//    @JoinColumn(name="processTemplate")
//    private Set<ElementaryFlowTemplate> elementaryFlowsTemplate;

    @ManyToOne
    @JoinColumn(name = "fk_source_info",referencedColumnName = "id")
    private SourceInfo sourceInfo;

    @Enumerated(EnumType.STRING)
    private Validation validation;

    @OneToMany(cascade = CascadeType.ALL,orphanRemoval = true)
    @JoinColumn(name="processTemplate")
    private Set<BaseEnvironmentalImpact> environmentalImpacts;

}

2.ProcessTemplateId(ProcessTemplate的复合Id):

@Embeddable
public class ProcessTemplateId implements Serializable {


    @Column(name = "process_template_id")
    private UUID processTemplateId;

    @Column(name = "reference_product_id")
    private UUID referenceProductId;

    public ProcessTemplateId() {
    }

    public ProcessTemplateId(UUID processTemplateId,UUID referenceProductId) {
        this.processTemplateId = processTemplateId;
        this.referenceProductId = referenceProductId;
    }

    public UUID getProcessTemplateId() {
        return processTemplateId;
    }

    public UUID getReferenceProductId() {
        return referenceProductId;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ProcessTemplateId)) return false;
        ProcessTemplateId that = (ProcessTemplateId) o;
        return Objects.equals(getProcessTemplateId(),that.getProcessTemplateId()) &&
                Objects.equals(getReferenceProductId(),that.getReferenceProductId());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getProcessTemplateId(),getReferenceProductId());
    }
}

3.FlowTemplate 有一个@ManyToOne 到 ProcessTemplate

@Data
@Entity
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class FlowTemplate extends AbstractFlowTemplate {

    private String name;

    @ManyToOne
    @JoinColumn(name = "fk_flow_base",referencedColumnName = "id")
    private FlowBase flowBase;

    @ManyToOne
    @JoinColumn(name = "fk_linked_process_base",referencedColumnName = "id")
    private ProcessBase linkedProcessBase;

    @ManyToOne
    @JoinColumns({@JoinColumn(name = "process_template_id",referencedColumnName = "process_template_id"),@JoinColumn(name = "reference_product_id",referencedColumnName = "reference_product_id")})
    private ProcessTemplate linkedProcessTemplate;

    @ManyToOne
    @JoinColumns({
            @JoinColumn(
                    name="process_id",referencedColumnName = "process_id"),@JoinColumn(
                    name="reference_product_id",referencedColumnName = "reference_product_id")
    })
    private ProcessTemplate processTemplate;
}

问题在这里:

    @OneToMany
    @JoinColumn(name="processTemplate")
    private Set<FlowTemplate> flowsTemplate;

但我不知道如何设置这种单向关系。 请注意,流程模板有一组流模板,这些流模板具有链接的流程模板(不是逆关系),但这不是双向关系。是简单的单向 oneToMany 和 ManyToOne。如何设置一对多?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...