1

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;
4

1 に答える 1

0

正確ではありませんが、あなたの投稿は私にいくつかの手がかりを与えてくれました。基本的にはい、フィールド名の末尾にある「}」記号のために例外が発生しましたが、今まで理由がわかりませんでした:)私はいくつかの問題を抱えていました

 sortBy="#{element.customer} "

最後に空白がありました。

 sortBy="#{element.customer}"

それを削除すると、すべてが修正されました;)

于 2013-01-27T18:50:23.810 に答える