【发布时间】:2012-11-08 11:01:12
【问题描述】:
对于上下文,我在客户端使用 MVP 模式,因此带有 One 列表的视图只知道 ID,当我的新 Many 在服务器上收到时,我希望能够使用“setOneId”或空的One 对象更新One 的外键,并将ID 设置为所需值。
所以我尝试在 DataNucleus 中创建一个多对一的单向,但我有点挣扎。我可以使用 JDO 或 JPA,我真的不在乎。在 JPA 中,我试过这个:
@Entity
public class Many {
@Id
String id;
@ManyToOne
@Join(name = "idOne")
One one;
}
@Entity
public class One {
@Id
String id;
}
这几乎就是我想要的。创建了一对多但使用连接表。我想有一个直接的关系。当我插入/更新Many 时,我不想插入/更新相关的One,只需使用Many 对象中的好ID 更新idOne。
我找到了这个blogpost,但它与 Hibernate 一起使用,我认为它仍然使用连接表:
@Entity
public class Many {
@Id
public String id;
@Column(name="idOne")
private String idOne;
@ManyToOne
@JoinColumn(name="idOne", nullable=false, insertable=false, updatable=false)
private One one;
}
我试过了,但我得到的正是this error。
我不明白我是如何挣扎的。我的目标是有一个表格来保存我创建/更新的一些参考数据(例如国家/地区列表One)和“工作项目”列表(例如城镇Many)无需创建/更新引用数据,只需其在 Many 对象中的外键。
【问题讨论】:
-
使用
@MoneyToMany关系。 -
你的意思是@ManyToMany? The documentation 说它是双向的,它也使用连接表。在我的例子中,
One对象不需要知道Many。 -
如果您使用您编写的代码,并删除
@Join,那么这将在 JPA 中工作。代码生成器将为Many生成一个表,其中有一列是One的外键。我不认识@Join注释,所以我怀疑这是导致问题的原因。 -
如果您不想要一个连接表,那么为什么要使用@Join? DN 文档定义了如何放置这些关系以及你得到什么表,无论是 JDO 还是 JPA
标签: java jpa jdo datanucleus many-to-one