Hibernate @jpa中的SqlResultsMapping列名无效错误
我使用JOIN语句通过createNativeQuery从两个表(申请人和地址)获取数据。 但是我得到了一个无效的列名错误。 实际情况是: 在申请班Hibernate @jpa中的SqlResultsMapping列名无效错误,hibernate,jpa,Hibernate,Jpa,我使用JOIN语句通过createNativeQuery从两个表(申请人和地址)获取数据。 但是我得到了一个无效的列名错误。 实际情况是: 在申请班 @SqlResultSetMapping(name="menu-details", entities={ @EntityResult(entityClass=Applicant.class, fields = { @FieldResult(name="
@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")
})
}
)
在DAO中,我正在尝试
String nativeQuery=“选择distinct(LA.申请人\ ID)作为申请人\ ID,LA.联系人\编号作为联系人\编号,LA.出生日期\为出生日期\名,LA.申请人\名作为申请人\名,
LA.状态为状态,LAA.状态为贷款申请人LA的状态,
贷款\地址\ LAA LAA,其中LA.申请人\ id=LAA.申请人\ id”;
Query q=entityManager.createNativeQuery(nativeQuery,“菜单详细信息”);
ArrayList menuList=新的ArrayList();
List objects=q.getResultList();
System.out.println(“查询数量为”+objects.size());
用于(对象:对象){
if(申请人的对象实例){
申请人=(申请人)对象;
System.out.println(applicator.getId());
System.out.println(applicator.getName());
System.out.println(applicator.getContactNo());
}
if(AddressA的对象实例){
AddressA地址=(AddressA)对象;
System.out.println(address.getState());
}
}
执行时,我得到一个错误
原因:java.sql.SQLException:列名无效
位于oracle.jdbc.dbaccessdbaccess.DBError.throwSqlException(DBError.java:134)
位于oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
在oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
中,您可以编写:
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
:抱歉,这是一个复制粘贴错误。我已更正了此处的查询。在sqldeveloper中,我得到了同一查询的两条记录。我想我是因为列的顺序不正确而出错了?执行
q.getResultList()
时是否发生了错误?那真的需要吗?distinct+其他变量将覆盖distinct。并删除所有结果列的别名(as…)。您正在指定要使用的SqlResultSetMapping,该映射尝试从SQL结果创建申请者和地址实体,但它似乎不完整。例如,地址真的只有一个状态字段吗?如果没有,则还需要返回构建地址所需的其他字段。尝试在本机查询中使用select*作为别名,除非返回的字段与实体中映射的字段不同,否则不需要FieldResult。
from loan_applicant LA, loan_address_a LAA where LA.applicant_id=LAA.applicant_id