将数据保留到数据库会导致非法状态异常

时间:2012-12-03 22:36:08

标签: jpa jpa-2.0

我有一个JPA问题。

假设我有一个实体设置如下(只是假设的)。

@Entity
@Table (name = "TESTTABLE")
public class TestTable {

@Id
@Basic (optional = false)
private String id;

@JoinColumn(name="TESTID", referencedColumnName = "ID")
@OneToOne(optional = true)
private TestTable testId;

}

基本上,
- = - = - = - = ----
| TestTable ....... |
- = - = - = --- = ----
|字符串id .......... |< ----------------------- |
| String testId .... | ----------- TestId = id |
- = - = - = - = - = - =

我在DB中设置了foreign_key约束,并且在代码方面,如果为testId输入的值在TestTable中没有相应的id值,那么我期望返回正常的“违反完整性约束 - 未找到父键”约束如果我唯一的条目是(1,null)和(2,1),(3,17)将导致失败)。

但是,当我尝试将前面提到的(3,17)这样的条目保存到数据库时,我收到IllegalStateException错误(因为我没有CascadeType.PERSIST,我试图保留一个不存在的对象在数据库中)。我知道这是预期的行为,但无论如何都要绕过这个并让数据库处理它(从而返回预期的约束)?

感谢。

1 个答案:

答案 0 :(得分:0)

在关系中使用级联PERSIST。

在EclipseLink中,您还可以使用持久性单元属性

"eclipselink.persistence-context.commit-without-persist-rules"="true"