Java 问题!不使用数据访问对象(dao)和JPA获取实体数据?

Java 问题!不使用数据访问对象(dao)和JPA获取实体数据?,java,jsp,jpa,dao,Java,Jsp,Jpa,Dao,我有一个Dao,它根据用户id获取事件。它返回事件对象 public enum Dao { INSTANCE; public List<EventsDetail> getevents(String userId) { EntityManager em = EMFService.get().createEntityManager(); Query q = em.createQuery("select t from EventsDetail t where t.Membe

我有一个Dao,它根据用户id获取事件。它返回事件对象

public enum Dao {
INSTANCE;
public List<EventsDetail> getevents(String userId) {
    EntityManager em = EMFService.get().createEntityManager();
    Query q = em.createQuery("select t from EventsDetail t where t.MemberId = :userId");
    q.setParameter("userId", userId);
    @SuppressWarnings("unchecked")
    List<EventsDetail> events = q.getResultList();
    return events;
  }
}
公共枚举Dao{
实例;
公共列表getevents(字符串用户ID){
EntityManager em=EMFService.get().createEntityManager();
Query q=em.createQuery(“从EventsDetail t中选择t,其中t.MemberId=:userId”);
q、 setParameter(“userId”,userId);
@抑制警告(“未选中”)
List events=q.getResultList();
返回事件;
}
}
这里我有一个jsp页面,它在导入dao类时调用dao。在这里,我使用try-and-catch抛出异常,在这里我得到了空指针异常

<%
Dao dao = Dao.INSTANCE;
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
List<EventsDetail> events = new ArrayList();
if (user != null) {
  pageContext.setAttribute("user", user);
  events = dao.getevents(user.getUserId());
    %>
}....

 <% 
try{
for (EventsDetail event : events) {
    pageContext.setAttribute("title", event.Title());
    pageContext.setAttribute("place", event.getPlace());
    pageContext.setAttribute("category", event.Category());
    pageContext.setAttribute("cdate", event.Cdate());
 %>
            <div class="row">
                <span class="r1"><%=count%></span>
                <span class="r2">${fn:escapeXml(cdate)}</span>
                <span class="r2">${fn:escapeXml(place)}</span>
                <span class="r3">${fn:escapeXml(title)}</span>
                <span class="r4">${fn:escapeXml(category)}</span>

            </div>
 <% }  
          } catch (Exception e)
          {
            System.out.println("Exception:" + e);
          }
             %>

}....
${fn:escapeXml(cdate)}
${fn:escapeXml(位置)}
${fn:escapeXml(标题)}
${fn:escapeXml(类别)}

问题是我只从数据存储中获取空数据,而数据存储中已经存在数据。

我认为问题在于您的
getEvents
方法

您可以尝试执行以下操作:

public enum Dao {
INSTANCE;
public List<EventsDetail> getevents(String userId) {
    EntityManager em = EMFService.get().createEntityManager();
    Query q = em.createQuery("select t from EventsDetail t where t.MemberId = " + userId);
    q.setParameter("userId", userId);
    @SuppressWarnings("unchecked")
    List<EventsDetail> events = q.getResultList();
    return events;
  }
}
公共枚举Dao{
实例;
公共列表getevents(字符串用户ID){
EntityManager em=EMFService.get().createEntityManager();
Query q=em.createQuery(“从EventsDetail t中选择t,其中t.MemberId=“+userId”);
q、 setParameter(“userId”,userId);
@抑制警告(“未选中”)
List events=q.getResultList();
返回事件;
}
}

并确保传递了正确的用户ID。

是否有任何理由使用ENUM?只是好奇……:)我只是从这个链接()创建此类项目的初学者。因为他使用了枚举。所以我用它来学习一些新的东西。