2013-07-30 84 views
0

我正在使用JOIN语句从两个表(APPLICANT和ADDRESS)使用createNativeQuery获取数据。 但我得到一个无效的列名称错误。 的实际情况是:@ jqlResultSetMapping在jpa无效的列名错误

在申请人类

@SqlResultSetMapping(name="menu-details", 
     entities={ 
       @EntityResult(entityClass=Applicant.class, fields = { 
         @FieldResult(name="id", column="APPLICANT_ID"), 
         @FieldResult(name="contactNo", column="CONTACT_NO"), 
         @FieldResult(name="dateOfBirth", column="DATE_OF_BIRTH"), 
         @FieldResult(name="name", column="APPLICANT_NAME"), 
         @FieldResult(name="status", column="STATUS") 
         }), 
      @EntityResult(entityClass=AddressA.class, fields = { 
        @FieldResult(name="state", column="STATE") 
      }) 
    } 

In DAO, I am trying 
String nativeQuery="select distinct (LA. APPLICANT_ID) as APPLICANT_ID, LA.CONTACT_NO  as CONTACT_NO,LA.DATE_OF_BIRTH as DATE_OF_BIRTH,LA.APPLICANT_NAME as APPLICANT_NAME, 
LA.STATUS as STATUS, LAA.STATE as STATE from loan_applicant LA, 
loan_address_a LAA where LA.applicant_id=LAA.applicant_id"; 
Query q=entityManager.createNativeQuery (nativeQuery,"menu-details"); 
ArrayList<Applicant> menuList=new ArrayList<Applicant>(); 
List<Object> objects=q.getResultList(); 
System.out.println("the no of queries is "+objects.size()); 
    for(Object object:objects){ 
     if(object instanceof Applicant){ 
      Applicant applicant=(Applicant)object; 
      System.out.println(applicant.getId()); 
      System.out.println(applicant.getName()); 
      System.out.println(applicant.getContactNo()); 
     } 
     if(object instanceof AddressA){ 
      AddressA address=(AddressA)object; 
      System.out.println(address.getState()); 
     } 
    } 




while executing I am getting an error 

Caused by: java.sql.SQLException: Invalid column name at oracle.jdbc.dbaccessdbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)

+0

您指定SqlResultSetMapping使用,它试图从SQL结果创建申请人和地址实体,但它似乎不完整的。例如,Address是否真的只有一个State域?如果不是,则还需要返回构建地址所需的其他字段。尝试在您的本机查询中使用select *作为别名,并且FieldResult不应该是必需的,除非您从实体中映射的内容返回不同的字段。 – Chris

回答

0

你写:

from loan_applicant LA, loan_address_a LAA where La.applicant_id=la. applicant_id 

也许你想要的是:

from loan_applicant LA, loan_address_a LAA where LA.applicant_id=LAA.applicant_id 
+0

:对不起,这是一个复制粘贴error.I已纠正查询在这里。在SQL Developer中,我为同一个查询获取两条记录。我想由于列的排序不正确,我得到一个错误? –

+0

在执行'q.getResultList()'时会发生错误吗?真的很明显需要吗? distinct +其他变量将覆盖独特。并删除所有结果列的别名(如...)。 – Angga