我正在使用JPA的Hibernate 3.6实现。我有两个逻辑父子关系的表。通常,“父”中的每个记录的“子”中都会有一条记录。表格如下所示:
CREATE TABLE FOO (
FOO_ID INT IDENTITY,
BAR_ID INT DEFAULT 0 NOT NULL,
SOMEDATA CHAR(50) );
CREATE TABLE BAR (
BAR_ID INT IDENTITY,
OTHERDATA CHAR(50),
STILLOTHER CHAR(50)) ;
但是,已决定某些“父”记录不应包含“子”记录,我应该在0
列中添加FOO.BAR_ID
。
如何在我的实体类中实现它?现在这些类看起来像这样:
public class Foo implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name = "FOO_ID", unique = true, nullable = false)
private Long fooId;
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "BAR_ID", nullable = false)
private Bar bar;
}
public class Bar implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name = "BAR_ID", unique = true, nullable = false)
private Long barId;
)
我似乎无法找到在0
列中放置FOO.BAR_ID
而不尝试在BAR
表中创建记录的正确语法。这甚至可以用Hibernate完成吗?
答案 0 :(得分:0)
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinColumn(name = "BAR_ID", nullable = false)
我相信你应该尝试删除。
nullable = false
你告诉hibernate,Foo的Bar不能为空。如果Bar是可选的,那么有时它必须为null。因为它不能为null并且CascadeType是Persist,所以Hibernate保存了Foo在保存Foo时必须具有的Bar。