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() 这样的问题。

如果我执行“来自 cityName = 的用户?” 它不起作用...

这是由于方面波动。不是将我的私有字符串 cityName 关联到休眠中的“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 回答