2014-02-06 44 views
0

我想写我的第一个JPA Web应用程序,我卡住了。我有以下代码:Java持久性 - 创建查询失败

@Stateless 
public class TestDAO { 

    @PersistenceContext(unitName="dbcon")  
    EntityManager em; 

    public TestDAO() { 

    } 

    public TestCon getData() { 
     Query qry = em.createQuery("select t from TestCon t"); 
     ... 

最后一行失败 - “java.lang.NullPointerException”。该TestCon代码:

@Entity 
@Table(name = "testcon", schema = "C##test") 
public class TestCon { 


    @Id 
    @Column(name = "a") 
    private int a; 

    @Column(name = "b", length = 20) 
    private String b; 

    public String getB() { 
     return b; 
    } 
} 

而且persistence.xml中的代码如下:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="dbcon" transaction-type="JTA"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <jta-data-source>java:/jboss/datasources/OracleDS</jta-data-source> 
     <class>code.TestCon</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

任何帮助表示赞赏。

+0

你是否在使用Spring进行依赖注入?你的代码永远不会设置一个EntityManager ... –

+0

不,不使用Spring。实体管理者不是从工厂创建的。它通过@PersistenceContext(unitName =“dbcon”) – user1680859

+0

作为资源从容器注入,因为您可以清楚地看到,它不是... – Antoniossss

回答

1

@PersistenceContext注释仅适用于Java EE容器。你正在运行哪个应用服务器?

如果您没有运行Java EE容器,而只是像Tomcat这样的servlet容器,则需要使用EntityManagerFactory.createEntityManager()创建EntityManager

+0

我正在使用JBOSS服务器。并且我尝试了EntityManagerFactory.createEntityManager()并且它不起作用 – user1680859

+0

您是否在JBoss日志中看到任何错误? –

+0

你的'persistence.xml'位于运行时? –