У меня есть четыре объекта: расписание, событие, местоположение (не важно для этого примера) и EventLocation. Отображения OneToOne являются Schedule -> Location -> EventLocation -> EventJPA Java Persistence API Query возвращает нулевые результаты
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)
и я могу ходить по ссылкам. Например, идентификатор события правильно, когда я исполняю
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 в результате, они верны.
Что я делаю неправильно и как его исправить?