繁体   English   中英

@ OneToOne-Relation与“不为空”

[英]@OneToOne-Relation with “is not null”

我正在使用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一样。

感谢所有尝试与我一起解决的人。

在定义实体时,Xcase将具有外键

因此,其ID旁边的Xcase表将具有caseStuff_id(或其他名称)作为Xcase ID的外键。

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

在此处输入图片说明

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

因此,可能是您的CaseStuff表(如果它是由持久性提供程序生成的,则没有案例ID)

从结构上来讲,请检查数据库级别以查看表的定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM