1

アスペクトを使用して、休止状態の注釈付きクラスにパラメーターを挿入する方法を探しています。

これがユーザーです:

 @Entity
 public class User implements IHasCity {

     @Id
     private int id;

     private String name;

}

public interface IHasCity {

}

これがそのユーザーに貢献する側面です

public aspect ACity {

@Column
private String IHasCity.cityName;

private String IHasCity.getCityName(){
 return this.cityName;
}

}

今、私はリクエストをしたいと思います:

私が次のようにしている場合:

「ユーザーから」私はresult.getCityName()のように問題はありません。

「from User where cityName=?」を実行すると、うまくいきません...

アスペクトの揺れによるものです。プライベートな String cityName を hibernate の "cityName" に関連付ける代わりに、class$ajc$intertype$interface$cityName のような使用できないインタータイプ名に関連付けます。

これを回避する方法はありますか?hql属性名の関連付けを変更しますか?

どうもありがとうございました !

4

1 に答える 1

1

IHasCity.cityNameという名前は、aspectjバイトコードウィーバーによってajc $ interField $ interface$cityNameのように変更されます。

休止状態を要求するときは、考慮する必要があります。私はあなたがそうするためにヘルパーを作成することができると思います:

session.createQuery("from User u where u." + AspectHelper.mangle(ACity.class,IHasCity.class,"cityName") + "=:cityName").setParameter(":cityName",...etc).

彼らは、そのトリックを回避するオプションを提供するために、AspectJで名前マングリング戦略を検討しています。そのスレッドを参照してください

于 2010-02-12T18:37:57.553 に答える