У меня есть запрос в классе сущности и я использую аннотации JPA. Оператор BETWEEN возвращает результаты, но я не могу пометить это условное выражение «WHERE e.feature =: feature», которое ссылается на значение String в другой таблице.Добавить условный оператор JPQL BETWEEN
@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 у меня есть этот запрос, где Ет экземпляр 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
Это когда я начинаю пытаться добавьте функцию условное, что я не получаю никаких результатов в базе данных:
> @NamedQuery(name = "Events.getEventsBetweenDates", query = "SELECT e
> from Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate" AND
> e.feature = :feature)
Этот запрос был один, который возвращает NullPointerException, когда вызывается из метода запроса BusinessObject:
SELECT e FROM Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate AND e.feature = :feature
какие идеи? Thanks
Определение «не может получить запрос на работу» ... вы получаете исключение или он просто не возвращает правильные результаты? Кроме того, в вашем примере вы не используете именованный запрос. Используйте 'em.createNamedQuery (« Events.getEventsBetweenDates »)' – DannyMo
Хорошо, пожалуйста, включите трассировку стека исключений и укажите, где в вашем коде генерируется исключение. – DannyMo
do em.createNamedQuery никогда не работал для меня в прошлом. Я думаю, что это не названные запросы. Я буду ссылаться на их запросы JPQL, а затем – joshpt