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

Posted

技术标签:

【中文标题】问题!不使用数据访问对象 (dao) 和 JPA 获取实体数据?【英文标题】:Problems! Entity data are not fetched using data access object (dao) and JPA? 【发布时间】:2014-08-06 05:30:50 【问题描述】:

我有这个根据用户 ID 获取事件的 Dao。它返回事件对象。

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 的 jsp 页面,因为我已经导入了 dao 类。在这里,我使用 try 和 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);
          
             %>

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

【问题讨论】:

有什么理由使用 ENUM 吗?只是好奇... :) 我只是初学者,从这个链接(vogella.com/tutorials/GoogleAppEngineJava/article.html)创建这种项目。因为他使用了枚举。所以我用来学习一些新东西。 【参考方案1】:

我认为问题出在您的 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;
  

并确保您传递了正确的 userId。

【讨论】:

以上是关于问题!不使用数据访问对象 (dao) 和 JPA 获取实体数据?的主要内容,如果未能解决你的问题,请参考以下文章

JPA & JDBC 可以在 DAO 层共存吗?

Web 应用程序:用于数据层的 DAO 和 JPA

spring数据持久化

有没有好的通用 JPA DAO 实现?

Java 新手 - 啥是 JPA 和 DAO? [关闭]

Spring+JPA EntityManager 注入 service 和 dao