저는 JPA2, Unitils, jUnit + 다른 것들을 사용하고 있습니다.@ OneToOne- "not not null"과의 관계
@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 객체를 반환합니다. "is not null"을 사용하면 객체를 반환하지만 디버깅 중에 CaseStuff.xcase를 검사하면 null이됩니다.
어떤 아이디어입니까, 여기에 무슨 문제가 있습니까?
는 편집 : Hibernate에 의해 생성 된 SQL은
select
*
from
CaseStuff casestuff0_
where
(
casestuff0_.xcaseid is null
)
*로 * 모든 필드 이름을 대체 변환
EDIT2 : 나는 OneToOne-관계로 변경하기 전에, 그것은 불필요한 ManyToOne는 했다 . 이전에 JUnit 테스트는 s.xcase 아직 설정되어있는 경우로이 여전히 어떤 이유로 제대로 작동 쿼리
"select s from CaseStuff s where not exists (select x from s.xcase x)"
했다.
나와 함께 알아 내려고 모든 사람에게 감사드립니다.
최대 절전 모드로 실행되는 정확한 SQL보기를 참조하십시오. –
좋은 생각이지만 흥미로운 것은 없습니다 (편집 참조). – Thomas
데이터베이스를 확인하고 테이블 행에 실제로 삽입 된 값을 볼 수 있습니까? – remigio