我正在使用 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。
感谢所有试图和我一起解决问题的人。