微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取Javassist类型而不是实际的Hibernate实体类型

我偶然发现了一个非常烦人的情况:我正在使用Hibernate& Spring作为我的应用程序的后端,似乎在某些情况下,与特定实体关系的实体不会从DB中获取为普通实体对象,而是作为Javassist类型.例如.:

我的Campaign实体具有以下关系:

@Entity
@Table(name = "campaign")
public class Campaign implements Serializable {
  [..]
  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
        "campaign_id","dealer_id" }),name = "campaign_has_dealer",joinColumns = { @JoinColumn(name = "campaign_id",nullable = false) },inverseJoinColumns = { @JoinColumn(name = "dealer_id",nullable = false) })
  private List

在检索连接到此Campaign的salesAreas后,我得到SalesArea _ $$_ javassist_56的列表,而对于经销商,我获得了正常的Hibernate实体.由于客户端部分基于GWT,我们使用RequestFactory来检索内容.我最初认为这是代理,定位器等问题,但是我在服务中设置了一个断点,在这些断点中检索这些断点,并且在选择它们之后直接将它们作为Javassist对象.看起来即使删除FetchType.LAZY注释(虽然绝对不是理想的解决方案),同样的事情也会发生.这也发生在其他类型的关系中,而不仅仅是@ManyToMany.

我们使用GWT 2.3,Spring 3,Hibernate 3.6.3和JPA 2.0进行注释.

任何建议,将不胜感激.

提前致谢

最佳答案
据我所知,你遇到的最大问题不是你的关联的获取类型,而是代理类型与RequestFactory不能很好地协作.

是的,它可以通过改变获取策略来解决,但这听起来像一个弱的解决方法,可能会破坏奇怪的情况.

我不记得究竟如何解决它,但我做到了,据我所知,ServiceLayerDecorator类中有一个扩展点.基本上你检查你要返回的对象是否是Hibernate代理(检查Hibernate和HibernateProxy类),然后在ServiceLayerDecorator中返回非代理类型. (http://code.google.com/p/google-web-toolkit/issues/detail?id=6767)

至于你的获取策略,我主要推荐@BatchSize(N),其中N很大(可能是1000),但这是一个独立的主题.

祝好运!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐