无法在testEntityManager容器中运行本机JPA查询

时间:2014-07-28 01:04:58

标签: jpa eclipselink testng nativequery

注意:我在eclipse论坛上发布了这个问题,但没有收到回复,但我认为我对问题的描述非常明确。

我在这里发帖。如果有人可以提供帮助,那就太棒了。

我有一个JPA实体类,它没有在数据库中支持它的表。我们只是创建它,因为我们必须运行一个需要在许多表上执行连接的查询。因此,我们采用本机查询方式来提高速度,而不是创建命名查询。那就是我们有一个JPA实体,如:

@Entity

@SqlResultSetMapping(name = "userMapping", entities=@EntityResult(entityClass =  
User.class))

@NamednativeQuery(name = "User.query", query = "-- native query here --",   
resultSetMapping = "userMapping")

public class User {

}

现在这可以通过entityManager对象运行,如:     em.createNamedQuery(" User.query")。setParameter(" userParam",param).getResultList();

但是在使用Testng在实体管理器容器环境(使用EntityManagerFactory创建)内测试时,会抛出0RA-942表或视图错误。我们尝试在persistence.properties和SessionCustomizer中启用use_native_sql = true。

我们使用eclipselink JPA。

有人可以帮忙提供一些反馈意见吗?

由于

1 个答案:

答案 0 :(得分:1)

解决问题的线索可能是您原生查询的结构。

我测试了使用非映射实体和Eclipselink 2.5.1的命名本机查询的简单用例,它运行良好。我使用的代码是这样的(表EMPLOYEE存在于底层数据库中,表USER不存在)。

@Entity
public class Employee {
    @Id @GeneratedValue int id;
}

@Entity
@SqlResultSetMapping(name="userMapping", entities=@EntityResult(entityClass=User.class))
@NamedNativeQuery(name="User.query", query="SELECT id FROM \"User\"", resultSetMapping =      "userMapping")
public class User {
    @Id
    @GeneratedValue
    int id;
}

使用此代码命名查询成功执行并生成与EMPLOYEE表中的结果一样多的结果。但是,如果我将原生查询更改为以某种方式使用USER表我

SQLSyntaxErrorException: Table/View 'User' does not exist.

您可能正在使用您正在使用的命名查询更新您的问题,以及报告的哪些表格不存在以确认是否属实。