0

I have a query in my entity class and am using JPA annotations. My BETWEEN statement returns results, but I cannot seem to tag on this conditional "WHERE e.feature = :feature" which references a String value in another table.

@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;
...
}

In my BusinessObject class I have this query where em is the EntityManager instance:

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

The following JPQL returns entries fine:

SELECT e FROM Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate

It is when I start trying to add the Feature conditional that I am not getting any results from the database:

> @NamedQuery(name = "Events.getEventsBetweenDates", query = "SELECT e
> from Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate" AND
> e.feature = :feature)

This query was the one that returns the NullPointerException when called from the BusinessObject query method:

SELECT e FROM Events e WHERE e.timeOfEntry BETWEEN :startDate AND :endDate AND e.feature = :feature

any Ideas? Thanks

4

1 回答 1

0

It dawned on me that I could utilize the auto-complete functionality of Netbeans to help me out. When doing a @NamedQuery() in an entity class, you can do the control+spacebar shortcut to have Netbeans tell you what options are syntactically correct.

This is the query that worked for me:

    events = em.createQuery("SELECT e FROM Events e WHERE e.feature.name = :featureName AND e.timeOfEntry BETWEEN :startDate AND :endDate")
            .setParameter("startDate", startDate, TemporalType.TIMESTAMP)
            .setParameter("endDate", endDate, TemporalType.TIMESTAMP)
            .setParameter("featureName", featureName)
            .getResultList();
于 2013-06-25T14:06:05.013 回答