【发布时间】:2012-03-23 15:00:00
【问题描述】:
我是 JPA 的新手,在理解双向关系方面存在一些问题。
我有实体 Job 和 Execution。 1 个作业恰好属于 1 个执行,反之亦然。所以,我想使用 onetoone 关系。
我的代码如下所示:
@Entity
public class Execution {
....
@OneToOne(cascade=CascadeType.ALL,optional=false)
private Job job;
....
}
@Entity
public class Job{
......
@OneToOne(mappedBy="job",optional=false)
private Execution execution;
.....
}
我为这两个字段设置了 optional=false。正如预期的那样,如果我尝试持久化具有 Null Job 对象的 Execution 对象,休眠将引发异常。
但是可以使用 Null Execution 对象来持久化 Job 对象,尽管我设置了 optional=false。
我做错了什么?
【问题讨论】:
-
你能发布更多关于你的数据库结构的信息吗?
-
hibernate 不根据我的注释创建数据库结构吗?
-
可以,但不建议用于生产,我从未使用过。一般来说,我认为你应该设计你的数据库,然后创建实体以适应这种结构。你用的是什么数据库?
-
究竟什么东西会持久化到你的数据库中?执行对象的外键是否也为 NULL?我猜一个执行对象是在某个地方动态创建的,而持久化或者数据库结构应该被改变......但这真的只是一个猜测。