【发布时间】:2015-12-09 22:34:06
【问题描述】:
我一直在网上寻找一个不错的答案,但我得到的只是困惑。我正在为 hibernate 中的 @ManyToOne 注释应该如何工作而苦苦挣扎 - 因为 @OneToMany 和 @JoinColumn 似乎要好得多,因为 hibernate 正确地插入了外键,而不是我必须在保存之前在 java 中分配子对象。
基本上作为最简单的例子,我有这样的事情:
Parent Table: id int,
Child Table : id int, parentFk int
public class Parent{
@Id
@GeneratedValue
private Integer id;
@OneToMany
@JoinColumn(name = "parentFk")
private List<Child> children;
//setters and getters
}
public class Child{
@Id
@GeneratedValue
private Integer id;
@Column
private Integer parentFk;
//setters and getters
}
现在,如果我发送一些映射到 Parent 类的 json 并要求 hibernate 保存它,它将保存表中的所有内容,包括 parentFk 字段中父级的新 ID。然而,我一直认为这实际上是错误的做事方式,我应该在 Parent 类中做 @OneToMany(mappedBy = "id") - 然后还有 @ManyToOne 和 @JoinColumn 和 @987654330 Child 类中的 @ 对象。
问题是这样做的,我必须通过 java 代码手动设置子对象中的父对象,然后休眠才能正确地将父对象的 id 保存在 parentFk 字段中......这看起来很冗长做一些对我来说已经很完美的事情(尽管我无法从孩子那里访问父对象)。
此外,我尝试删除子对象中的 parentFk 字段并将@ManyToOne 与父对象引用一起使用,但休眠似乎不喜欢它。我做错了吗?
【问题讨论】:
-
你应该映射对象而不是 id 你的
Child应该引用Parent而不是父的 id。 -
这也要看你的需求,你需要它是双向关系还是单关系。但是,您现在所拥有的是错误的,因为您应该映射对象而不是普通的 id。
标签: java spring hibernate annotations