![](/img/trans.png)
[英]@OneToOne relation - NOT NULL property persisted as NULL without error in Hibernate
[英]@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.