我有四个实体:时间表、事件、位置(对于本示例而言并不重要)和事件位置。 OneToOne 映射是 Schedule -> Location -> EventLocation -> Event
时间表.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;
...
}
事件.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;
...
}
位置.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,它们是正确的。
我做错了什么以及如何解决它?
最佳答案
我会尝试打开一些更详细的日志记录来查看正在执行的 SQL 语句。请参阅http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging有关详细信息,
关于java - JPA Java 持久性 API 查询返回零结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28420678/