Java Hibernate不接受manyTone作为Id

Java Hibernate不接受manyTone作为Id,java,hibernate,composite-key,many-to-one,Java,Hibernate,Composite Key,Many To One,Hibernate不同意这种构造。我遗漏了什么吗?它给我带来的错误是: org.hibernate.MappingException:在进程中找不到逻辑名称为version\u id的列 关于如何在保持复合密钥结构的同时进行修复,有什么建议吗 数据模型 版本有许多操作 版本有很多过程 public class Version { @Id @Column(name = "id") public int Id; } 行动有一个过程 行动有一个版本 public class

Hibernate不同意这种构造。我遗漏了什么吗?它给我带来的错误是:

org.hibernate.MappingException:在进程中找不到逻辑名称为version\u id的列

关于如何在保持复合密钥结构的同时进行修复,有什么建议吗

数据模型

版本有许多操作

版本有很多过程

public class Version {
    @Id
    @Column(name = "id")
    public int Id;
}
行动有一个过程

行动有一个版本

public class Action {
    // Action has a composite key (ID and Version ID)

    @Id
    @Column(name = "id")
    public int id;

    @Id
    @ManyToOne
    @JoinColumn(name = "version_id")
    public Version version;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "process_id", referencedColumnName = "id"),
        @JoinColumn(name = "version_id", referencedColumnName = "version_id")
    })
    public Process process;
}
    public class Process {
    // Process has a composite key (ID and Version ID)

    @Id
    @Column(name = "id")
    public int id;

    @Id
    @ManyToOne
    @JoinColumn(name = "version_id")
    public Version version;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "process", targetEntity = Action.class)
    public List<Action> actions= new ArrayList<Action>();
}
这个过程有很多动作

进程有一个版本

public class Action {
    // Action has a composite key (ID and Version ID)

    @Id
    @Column(name = "id")
    public int id;

    @Id
    @ManyToOne
    @JoinColumn(name = "version_id")
    public Version version;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "process_id", referencedColumnName = "id"),
        @JoinColumn(name = "version_id", referencedColumnName = "version_id")
    })
    public Process process;
}
    public class Process {
    // Process has a composite key (ID and Version ID)

    @Id
    @Column(name = "id")
    public int id;

    @Id
    @ManyToOne
    @JoinColumn(name = "version_id")
    public Version version;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "process", targetEntity = Action.class)
    public List<Action> actions= new ArrayList<Action>();
}
公共类进程{
//进程具有复合密钥(ID和版本ID)
@身份证
@列(name=“id”)
公共int id;
@身份证
@许多酮
@JoinColumn(name=“version\u id”)
公开版本;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“process”,targetEntity=Action.class)

public List

在Action类中有两列名为version\u id。请尝试重命名第二个version\u id以处理\u version\u id:

public class Action {
    // Action has a composite key (ID and Version ID)

    @Id
    @Column(name = "id")
    public int id;

    @Id
    @ManyToOne
    @JoinColumn(name = "version_id")
    public Version version;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name = "process_id", referencedColumnName = "id"),
        @JoinColumn(name = "process_version_id", referencedColumnName = "version_id")
    })
    public Process process;
}

不允许在
@manytone
上指定
@Column
。您的表是什么样子的?好吧,我让hibernate生成它们…但是,这并不是因为这个错误…我添加了一张我试图实现的模型的一部分的图片。在Action.process之前您有两个
JoinColumn
。第二个没有谢谢。这确实是个问题。但是:Hibernate不能为不同的关系重用列?所以我的计划不起作用。在所有这些关系中重用version\u id列对我来说是完全有效的。有什么建议吗?我想没有,因为您可能在操作和过程中有两个不同的版本。您可以在en创建操作(即在将流程添加到操作之前检查版本)。