12

Sun Online のリソースでは、Criteria/Metamodel API の使用法に関する息子の例を提供していますが、Java を理解している限り、動作するのは不可能のようです。

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
EntityType<Owner> Owner_ = m.entity(Owner.class);

Root<Pet> pet = cq.from(Pet.class);
Join<Owner, Address> address = cq.join(**Pet_.owners**).join(**Owner_.addresses**);

Pet_またはという名前の属性を定義しないクラス のインスタンスです。EntityTypeownersaddresses

Pet_彼らはメタモデル用にとという名前のクラスを定義していますOwner_が、ここにインポートすると変数名との競合が発生します...私は正しいですか?

__

(質問はこれにも関連しています

4

1 に答える 1

14

この例は正しくありません。作成者は、正規の静的メタモデル クラス(生成されたもの) とメタモデル API を介して取得したクラスを混在させています。それらは、弱く型付けされた API または強力に型付けされた生成されたクラスのいずれかを使用することになっています。両方を一緒に使用することはできません。彼らの場合、 the (信じられないほど悪い命名の選択であり、誤解を招くものです) には、実際には属性Pet_がありません。ownersこれは報告する必要があります。チュートリアルのこの部分は誤解を招きやすく、間違っています。

こちらもご覧ください

于 2010-10-07T09:41:34.833 に答える