0

我正在使用 JPA2、Unitils、jUnit + 其他东西。我的问题涉及两个实体:

@Entity
public class CaseStuff implements Serializable {
....
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long caseStuffId;

@OneToOne(mappedBy = "CaseStuff")
private XCase xcase;
...
}

@Entity
public class XCase implements Serializable {
....
@OneToOne
@JoinColumn(name = "CASESTUFFID")
private CaseStuff caseStuff;
....
}

两个表都获得了另一个表的 ID,因此也可以反过来映射。在 jUnit-Test 中,Unitils 插入一个没有 XCase 的 CaseStuff 记录。我确认,它确实是空的。但是,然后我使用以下查询:

"select s from CaseStuff s where s.xcase is null"

它返回 0 个 CaseStuff 对象。对“不为空”执行相同操作会返回对象,但在调试时检查 CaseStuff.xcase 时,它​​显然为空。

任何想法,这里出了什么问题?

编辑:由 Hibernate 生成的 SQL 转换为

select
    *
from
    CaseStuff casestuff0_ 
where
     (
        casestuff0_.xcaseid is null
    )

*将所有字段名称替换为*

EDIT2:在我将其更改为 OneToOne-Relation 之前,它是不必要的 ManyToOne。以前 jUnit 测试有查询

"select s from CaseStuff s where not exists (select x from s.xcase x)"

由于某种原因,这仍然可以正常工作,就好像 s.xcase 仍然是一个 Set。

感谢所有试图和我一起解决问题的人。

4

1 回答 1

0

正如您定义的那样,您的实体 Xcase 将具有外键

所以它的 id 旁边的 Xcase 表将有 caseStuff_id(或其他名称)作为 Xcase id 的外键。

就像在这张图片中一样(对名称进行抽象)

在此处输入图像描述

在您的情况下,Person 是 Xcase,CaseStuff 是 PersonDetails

所以可能你的 CaseStuff 表(如果它是由持久性提供程序生成的,没有案例 id)

请检查 db 级别以查看您的表是如何定义的,从结构上讲。

于 2012-11-10T12:13:49.017 回答