Java Hibernate不接受manyTone作为Id
Hibernate不同意这种构造。我遗漏了什么吗?它给我带来的错误是: org.hibernate.MappingException:在进程中找不到逻辑名称为version\u 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
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创建操作(即在将流程添加到操作之前检查版本)。