Hibernate Annotation + AspectJ - >属性在HQL中命名pbs

时间:2010-02-12 17:00:47

标签: hibernate aspectj hibernate-annotations

我正在寻找一种方法来使用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属性名称关联?

非常感谢!

1 个答案:

答案 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