我有四個實體:計劃,事件,位置(對本示例不重要)和EventLocation。該OneToOne映射是表 - >位置 - > EventLocation - >事件JPA Java持久性API查詢返回零結果
Schedule.java
@Entity
@Table(name="Schedule")
@NamedQuery(name="Schedule.findAll", query="SELECT s FROM Schedule s")
public class Schedule implements Serializable {
@Id
private int scheduleId;
@Temporal(TemporalType.DATE)
private Date date;
private int locationId;
@OneToOne
@PrimaryKeyJoinColumn(name = "locationId")
private Location location;
...
}
Event.java
@Entity
@Table(name="Events")
@NamedQuery(name="Event.findAll", query="SELECT e FROM Event e")
public class Event implements Serializable {
@Id
private int eventId;
private String eventName;
...
}
Location.java:
@Entity
@Table(name="Locations")
@NamedQuery(name="Location.findAll", query="SELECT l FROM Location l")
public class Location implements Serializable {
@Id
private int locationId;
private String locationName;
@OneToOne
@PrimaryKeyJoinColumn(name = "locationId")
private EventLocation eventLocation;
...
}
EventLocation .java
@Entity
@Table(name="EventLocations")
@NamedQuery(name="EventLocation.findAll", query="SELECT e FROM EventLocation e")
public class EventLocation implements Serializable {
@Id
private int eventLocationId;
private int eventId;
private int locationid;
@OneToOne
@PrimaryKeyJoinColumn(name = "eventId")
private Event event;
...
}
注意:我無法更改數據庫的佈局。
我執行查詢
SELECT schedule FROM Schedule schedule WHERE (schedule.location.eventLocation.eventLocationId<>0)
,我可以通過引用行走。例如,事件ID是正確的,當我執行
System.out.println(curScheduleItem.getLocation().getEventLocation().getEvent().getEventId())
但是,如果我執行以下查詢,不返回任何結果,並且不產生錯誤。
SELECT schedule FROM Schedule schedule WHERE (schedule.location.eventLocation.eventId<>0)
EVENTID是從來沒有零在數據庫中,有符合這個查詢,但JPA查詢將返回一個空的結果集的記錄。同樣的情況,如果我執行:
SELECT schedule FROM Schedule schedule WHERE (schedule.location.eventLocation.locationId<>0)
它就像JPA不喜歡EVENTID或locationId,但eventLocationId 是罰款。而且,正如我所說的,如果我在沒有eventId或locationId的情況下執行查詢,請檢查結果中的eventId和locationId,它們是正確的。
我在做什麼錯,我該如何解決?