我最初的问题是https://stackoverflow.com/questions/12172614/hql-join-without-foreign-key-reference
但找不到任何解决方案,因此使用 JPA 进行本机查询。entityManager 的 createNativeQuery 返回 Query 对象,该对象又返回List<Object[]>
. 我不想在迭代列表时处理索引,因为它本质上容易出错。因此,我查看了其他一些解决方案,并发现 JPQL 的构造函数表达式作为解决方案之一。
表结构是
Schema1 -TableA
- NameColumn
- PhoneColumn
对应的Java类是
public class PersonSearch implements Serializable {
public PersonSearch (String NameColumn, String PhoneColumn) {
this.name = NameColumn;
this.phone = PhoneColumn;
}
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
查询是
Select NEW com.xyz.PersonSearch(ms.NameColumn, ms.PhoneColumn) From Schema1.TableA ms Where ms.PhoneColumn='9134409930'
使用 entityManager API 运行此查询时
entityManager.createQuery(queryString, PersonSearch.class);
低于错误。
Caused by: org.hibernate.hql.ast.QuerySyntaxException: Schema1.TableA is not mapped [Select NEW com.xyz.PersonSearch(ms.NameColumn, ms.PhoneColumn) From Schema1.TableA ms Where ms.PHONE='9134409930']
我的代码有什么问题?任何想法 ?