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

无法在testEntityManager容器中运行本机JPA查询,jpa,eclipselink,testng,nativequery,Jpa,Eclipselink,Testng,Nativequery,注意:我已经在eclipse论坛上发布了这个问题,但是没有收到回复,尽管我认为我对这个问题的描述已经足够清楚了 我把它贴在这里。如果有人能帮忙,那就太好了 我有一个JPA实体类,它在数据库中没有支持它的表。我们之所以创建它,是因为我们必须运行一个需要在多个表上执行联接的查询。因此,我们没有创建命名查询,而是采用本机查询方式来提高速度。也就是说,我们有一个JPA实体,如: @Entity @SqlResultSetMapping(name = "userMapping", entities=@E

注意:我已经在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()

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

我们使用EclipselinkJPA

有人能提供一些反馈吗


谢谢

解决问题的线索可能是本机查询的结构

我在Eclipselink 2.5.1中测试了将未映射实体与命名本机查询一起使用的简单用例,效果非常好。我使用的代码是这样的(表EMPLOYEE存在于底层数据库中,而表USER不存在)

使用此名为的代码,查询将成功执行,并生成与EMPLOYEE表中相同数量的结果。然而,如果我以某种方式将本机查询更改为使用用户表,我会得到

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

您可能正在用您正在使用的命名查询更新您的问题,并报告哪个表不存在以确认是否存在此问题。

您是否在容器vs JSE环境中针对同一数据库进行测试?是的。我在EntityManager中设置了持久性属性(持久性单元名称,persistence.properties);我为这个测试定制了数据库会话,在这里我设置了要使用的模式。感谢您的输入。显然,解决方案似乎是,在运行查询之前,我必须运行一个“ALTER SESSION SET CURRENT_SCHEMA=“SCHEMA”。尽管我使用.setTableQualifier(“SCHEMA”)为整个会话设置了架构,但它似乎没有被用于本机查询?
SQLSyntaxErrorException: Table/View 'User' does not exist.