Hibernate 注释 + AspectJ-> HQL 中的属性名称为 pbs

发布于 2024-08-21 12:14:21 字数 706 浏览 4 评论 0原文

我正在寻找一种使用方面在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

祁梦 2024-08-28 12:14:21

名称 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 的名称修改策略,以便提供避免这种伎俩的选项。请参阅线程

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 :

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

They are looking into name mangling strategies at AspectJ in order to give an option to avoid that trick. See that thread

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文