エンティティ クラスにクエリがあり、JPA アノテーションを使用しています。私の BETWEEN ステートメントは結果を返しますが、別のテーブルの文字列値を参照するこの条件 "WHERE e.feature = :feature" にタグを付けることができないようです。
@Entity
@Table(name = "EVENTS")
public class Events implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long eventsPk;
@ManyToOne
@JoinColumn(name = "USERS")
private Users user;
@ManyToOne
@JoinColumn(name = "FEATURES")
private Features feature;
@Column(name = "TIME_OF_ENTRY", unique = false)
@Temporal(TemporalType.TIMESTAMP)
private Date timeOfEntry;
...
}
私のBusinessObjectクラスには、emがEntityManagerインスタンスである次のクエリがあります。
public class EventsBusinessObject {
private static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(EventsBusinessObject.class);
public static List<Events> getEventsBetweenDates(EntityManager em, Date startDate, Date endDate, String feature) {
List<Events> events = null;
try {
events = em.createQuery(
"SELECT e FROM Events e WHERE e.timeOfEntry
BETWEEN :startDate AND :endDate
AND SELECT Feature f FROM Features WHERE f.feature = :feature")
.setParameter("startDate", startDate, TemporalType.TIMESTAMP)
.setParameter("endDate", endDate, TemporalType.TIMESTAMP)
.setParameter("feature", feature)
.getResultList();
} catch (NoResultException e) {
logger.error("NoResultException for EventsBusinessObject.getEventsBetweenDates");
} catch (Exception e) {
logger.error("unknown exception for EventsBusinessObject.getEventsBetweenDates");
}
return events;
}//end getEventsBetweenDates method
次の JPQL はエントリを正常に返します。
SELECT e FROM Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate
データベースから結果が得られないのは、Feature 条件を追加しようとしたときです。
> @NamedQuery(name = "Events.getEventsBetweenDates", query = "SELECT e
> from Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate" AND
> e.feature = :feature)
このクエリは、BusinessObject クエリ メソッドから呼び出されたときに NullPointerException を返すものでした。
SELECT e FROM Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate AND e.feature = :feature
何か案は?ありがとう