【问题标题】:Basic CRUD operations with entitymanager使用 entitymanager 的基本 CRUD 操作
【发布时间】:2016-01-24 11:12:19
【问题描述】:

我创建了一个 REST 服务项目,通过 DriverManager.getConnection(url,user,pass) 执行 CRUD 操作。

现在我的分配更改为在 Jboss 7.1.1 中定义连接并且可以正常工作(在 Jboss 管理控制台中测试数据源返回肯定结果,并且 sqljdbc 驱动程序在 MS SQL Server Management Studio 的活动监视器中也显示为活动状态)。

我应该使用 EntityManager 来运行我在旧项目中使用的本机查询,而无需生成实体或使用实体编写查询(这用于下一个分配)。

我根据我在研究中发现的内容编写了一个小测试代码,如下:

public class Test {

 @PersistenceContext(unitName="InternshipIS") protected EntityManager entityManager;
public void getQuerys(){

    String sqlQuery = "SELECT * from InternshipIS.dbo.Employee";
    Query q = entityManager.createNativeQuery(sqlQuery);
    System.out.println(q.getResultList().get(2));
}

当它到达下一行时,它会抛出 NullPointerException。

Query q = entityManager.createNativeQuery(sqlQuery);

请让我知道我在哪里搞砸了,以及是否需要完整的堆栈跟踪/persistence.xml/standalone.xml 或其他任何内容才能将它们添加到我的帖子中。

PS:这不是一个 Maven 项目。这是一个动态 Web 项目,我在此分配开始时转换为 JPA。

【问题讨论】:

  • EntityManager 为空?任何人在获得 NPE 时应该做的第一件事就是验证哪个变量为空。然后在这个网站上寻找许多其他关于人们没有正确注入 PersistenceContext 的帖子,通常是容器配置。

标签: java sql-server jpa jboss


【解决方案1】:

我通过以下调整解决了这个问题:

public class Test {
public void getQuerys(){
    EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("InternshipIS");
    EntityManager em = emFactory.createEntityManager();
    String sqlQuery = "SELECT * FROM Employee";
    Query q =   em.createNativeQuery(sqlQuery); 
 }
}

【讨论】:

    【解决方案2】:
     String sqlQuery = "SELECT * from InternshipIS.dbo.Employee";
    

    在这个查询中,Select * from InternshipIS 对于 sql 是可以理解的。 但我认为您正在将数据库名称与查询中的表连接起来。哪个不工作,查询返回空值。

    【讨论】:

    • 它有NPE,因为entityManager 为空,与查询无关
    • 我已将查询修改为:SELECT * FROM Employee,因为数据源已经指向数据库但结果相同。 @NeilStockton 如果这是问题(我想是的),我该如何解决?
    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2015-10-16
    • 2014-02-26
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多