UPDATE :我看到了数据库关系,我意识到Module表有两个对Unit表的引用(nid,unnr),但是Unit Table没有对Module Table的引用,它有仅使用nid进行子架表。
答案 0 :(得分:1)
首先,您当前显示的所有代码都混淆了一些东西......
你定义一个@JoinTable注释,这意味着你有3个表,1个有单位,1个有模块,1个有两个实体的id ......
我的第二个评论是你谈论模块和单元之间的一对一关系,但在你的示例代码中你放了一个多对多......
如果我按照你的描述,我会在代码中构建它:
@Entity
@Table(name = "unit")
public class Unit {
@Column(name = "nid")
private int nid;
@Id
@GeneratedValue
@Column(name = "unnr")
private int unnr;
@Column(name = "unhwtype")
private int unhwtype;
@Column(name = "unslot")
private int unslot;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "nid")
private Module module;
@Entity
@Table(name = "module")
public class Module {
@Column(name = "nid")
private int nid;
@Id
@Column(name = "mpos")
private int mpos;
@Column(name = "mhwtype")
private int mhwtype;
@OneToMany(mappedBy = "module", cascade = {CascadeType.ALL})
private Set units;
她的问题是我不确定这是否会起作用,因为nid不是模块Entity中的ID列,我认为你需要更改你的设计,以便nid是Id列。 ..您可以尝试使用此代码并希望它可以正常工作,否则将模块实体中的nid更改为ID ..