私の元の問題はhttps://stackoverflow.com/questions/12172614/hql-join-without-foreign-key-reference
でしたが、これに対する解決策が見つからなかったため、JPA を使用したネイティブ クエリに進みました。entityManager の createNativeQuery は Query オブジェクトを返し、それが を返しますList<Object[]>
。本質的にエラーが発生しやすいため、リストの反復中にインデックスを処理したくありません。したがって、他のソリューションを調べたところ、JPQLのコンストラクター式が解決策の1つとして見つかりました。
テーブル構造は
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']
コードの何が問題になっていますか? 何か案が ?