我正在寻找一种方法来使用aspect来在hibernate注释类中注入参数。
以下是用户:
@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()。
那样的问题如果我“来自用户,其中cityName =?”它不起作用......
这是由于方面的波动。而不是将我的私有String cityName与hibernate中的“cityName”相关联,而是将它与不可用的intertype名称相关联:类似于$ ajc $ intertype $ interface $ cityName。
你有办法解决这个问题吗?更改hql属性名称关联?
非常感谢!
答案 0 :(得分:1)
名称IHasCity.cityName将被aspectj字节码weaver破坏成类似的东西: AJC $ $场间接口$的cityName。
当你请求休眠时,你需要考虑到。我想你可以创建一个帮手:
session.createQuery("from User u where u." + AspectHelper.mangle(ACity.class,IHasCity.class,"cityName") + "=:cityName").setParameter(":cityName",...etc).
他们正在研究AspectJ的名称修改策略,以便提供一个避免这种技巧的选项。见thread