Hibernate 注释 + AspectJ-> HQL 中的属性名称为 pbs
我正在寻找一种使用方面在 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 与休眠中的“cityName”相关联,而是将其与不可用的类型间名称相关联:类似于 class$ajc$intertype$interface$cityName。
你有办法解决这个问题吗?更改 hql 属性名称关联?
非常感谢 !
I'm looking for a way to use aspects to inject parameters in hibernate annotated classes.
Here is a user :
@Entity
public class User implements IHasCity {
@Id
private int id;
private String name;
}
public interface IHasCity {
}
Here is an aspect contributing to that User
public aspect ACity {
@Column
private String IHasCity.cityName;
private String IHasCity.getCityName(){
return this.cityName;
}
}
Now i'd like to make an request :
If i'm doing like :
"from User" i have no problems to do like result.getCityName().
If i do "from User where cityName=?" it doesn't work ...
It is due to aspect waving. instead of associating my private String cityName to "cityName" in hibernate, it associates it to the unusable intertype name : something like class$ajc$intertype$interface$cityName.
Do you have a way around this ? changing hql attributes names associations ?
Thank you very much !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
名称 IHasCity.cityName 将被aspectj字节码编织器破坏成如下所示:
ajc$interField$interface$cityName。
当您请求休眠时,您需要考虑到。我想你可以创建一个助手来做到这一点:
他们正在研究 AspectJ 的名称修改策略,以便提供避免这种伎俩的选项。请参阅线程
The name IHasCity.cityName is gonna be mangled by aspectj bytecode weaver into something like :
ajc$interField$interface$cityName.
When you request hibernate you need to take take into account. I guess you could create a helper to do so :
They are looking into name mangling strategies at AspectJ in order to give an option to avoid that trick. See that thread