JPA2 を MySQL コネクタとして使用しており、クエリ ビルダーを使用してクエリを構築しています。結果リストをエンティティ パラメータで並べ替えようとしているときに、いくつかのエラーが見つかりました:
SEVERE: java.lang.IllegalArgumentException: The attribute [customer}] from the managed type [EntityTypeImpl@1572996478:Documentation [ javaType: class pl.ego.software.entity.Documentation descriptor: RelationalDescriptor(pl.ego.software.entity.Documentation --> [DatabaseTable(documentation)]), mappings: 20]] is not present.
理由はわかりませんが、これはエンティティ全体に存在しない唯一のエンティティ パラメータです。この例外は、クラス Root から get メソッドを使用しようとすると発生します。
Root<Documentation> u = select.from(Documentation.class);
CriteriaBuilder builder = em.getCriteriaBuilder();
if (sortField != null) {
Order o;
if (sortOrder == SortOrder.ASCENDING) {
o = builder.asc(u.get(sortField));
} else {
o = builder.desc(u.get(sortField));
}
select.orderBy(o);
}
sortField 値が "customer" に設定されている場合、u.get(sortField) は上記の例外を発生させます。sortField が別の値に設定されている場合、すべてがうまく機能します。
パラメータが存在することを確認するためのエンティティ コードの一部を次に示します。
@Size(max = 150)
@Column(name = "customer")
private String customer;