JPA2、Unitils、jUnit + その他のものを使用しています。私の問題は2つのエンティティに関するものです:
@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 を含まない 1 つの CaseStuff レコードを挿入します。本当にヌルであることを確認しました。しかし、次のクエリを使用します。
"select s from CaseStuff s where s.xcase is null"
0 個の CaseStuff オブジェクトを返します。「is not null」で同じことを行うと、オブジェクトが返されますが、デバッグ中に CaseStuff.xcase を調べると、明らかに null です。
ここで何がうまくいかないのですか?
EDIT: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 であるかのように、何らかの理由で引き続き正しく機能します。
私と一緒にそれを理解しようとするすべての人に感謝します。