为什么我不能一起使用JPA,数据库和primefaces?

时间:2011-04-21 15:48:06

标签: java database jpa java-ee primefaces

我有一个User类,whitch是JPA的数据库@Entity

我有一个UserServiceImpl类,它有getAllUser()方法(来自下面的例外:UserServiceImpl.java:16=第二行):

public UserServiceImpl(){
    em = EMService.getEntityManager();
}
@Override
@SuppressWarnings("unchecked")
public List<User> getAllUser() {
    String jpql = "SELECT u FROM User u";
    Query q = em.createQuery(jpql);
    List<User> users = (List<User>) q.getSingleResult();
    return users;
}

我有一个UserBean类,whitch是faces-config.xml中用于主要面的托管bean。并且会有Exception(UserBean.java:19=第5行):

private List<User> users;
private User selectedUser;
private UserServiceImpl userService;
public UserBean() {
    userService = new UserServiceImpl();
    users = userService.getAllUser();
}
public List<User> getUsers() {
    return users;
}

我认为,问题是托管bean无法使用其他类。这是例外:

java.lang.NoClassDefFoundError: javax/persistence/Persistence
at hu.pte.admin.services.EMService.getEntityManager(EMService.java:12)
at hu.pte.admin.services.usersmodul.UserServiceImpl.<init>(UserServiceImpl.java:16)
at hu.pte.admin.managedbeans.UserBean.<init>(UserBean.java:19)

这是EMService类的方法(第二行是错误的= EMService.java:12):

public static EntityManager getEntityManager(){
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("Admin");
    EntityManager em = factory.createEntityManager();
    return em;
}

这是users.xhtml(详细信息),我想在primefaces代码中使用托管bean(userBean):

<p:dataTable var="user" value="#{userBean.users}" paginator="true" rows="10"
        selection="#{userBean.selectedUser}" selectionMode="single" 
        onRowSelectUpdate="display" rowsPerPageTemplate="5,10,15">
        <f:facet name="header">The Users</f:facet>

        <p:column sortBy="#{user.id}" filterBy="#{user.id}">
            <f:facet name="header">
                <h:outputText value="ID" />
            </f:facet>
            <h:outputText value="#{user.id}" />
        </p:column>

persistance.xml具有连接到我的数据库的代码。请帮助我,我在互联网上找不到任何样本,这样就可以使用JPA和PrimeFaces了!谢谢!

2 个答案:

答案 0 :(得分:3)

该例外清楚地告诉你:

java.lang.NoClassDefFoundError: javax/persistence/Persistence

找不到javax.persistence.Persistence类的类定义。我假设您正在运行Java SE SDK。我建议下载并运行Java EE 6 SDK,其中包含Persistence API。

答案 1 :(得分:1)

除了NoClassDefFoundError之外,您的getAllUsers方法也存在问题:

List<User> users = (List<User>) q.getSingleResult();

如果查询结果是唯一的,则调用getSingleResult将返回单个User实体,否则将引发异常。要检索用户列表,您需要调用getResultList