【发布时间】:2012-12-03 22:36:07
【问题描述】:
我有一个 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;
}
基本上,
--=---=---=---=----
|测试表....... |
--=---=---=---=----
|字符串 id..........|
|字符串 testId....|------------TestId = id |
--=--=--=--=--=-=
我在数据库中设置了 foreign_key 约束,并且在代码方面,如果为 testId 输入的值在 TestTable 中没有相应的 id 值,我期望返回正常的“违反完整性约束 - 找不到父键”约束(所以如果我仅有的条目是 (1, null) 和 (2, 1), (3, 17) 将导致失败)。
但是,当我尝试将诸如上述 (3, 17) 的条目持久保存到数据库时,我收到 IllegalStateException 错误(因为我没有 CascadeType.PERSIST 并且我试图持久保存一个不存在的对象在分贝中)。我知道这是预期的行为,但是有没有绕过这个并让数据库处理它(从而返回预期的约束)?
谢谢。
【问题讨论】:
-
你能发布你是如何坚持的吗(3、17)?因为要做到这一点,您需要首先获取 ID 为 17 的 TestTable 实体,然后将其设置为 ID 为 3 的新实体。