我偶然发现了一个非常烦人的情况:我使用 Hibernate 和 Spring 作为我的应用程序的后端,似乎在某些情况下,与特定实体有关系的实体没有从数据库中作为普通实体对象获取,但作为 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<Dealer> dealers = new ArrayList<Dealer>();
@ManyToMany
// (fetch = FetchType.LAZY)
@JoinTable(uniqueConstraints = @UniqueConstraint(columnNames = {
"campaign_id", "sales_area_id" }), name = "campaign_has_sales_area", joinColumns = { @JoinColumn(name = "campaign_id", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "sales_area_id", nullable = false) })
private List<SalesArea> salesAreas = new ArrayList<SalesArea>();
}
检索到与此活动相关的 salesAreas 后,我得到了 SalesArea_$$_javassist_56 的列表,而对于经销商,我得到了普通的 Hibernate 实体。由于客户端部分基于 GWT,我们使用 RequestFactory 来检索内容。我最初认为这是代理、定位器等的问题,但我在服务中设置了一个断点,这些断点在其中被检索,并且它们在选择它们后直接是 Javassist 对象。似乎即使删除 FetchType.LAZY 注释(尽管绝对不是理想的解决方案),也会发生同样的事情。这也发生在其他类型的关系中,不仅仅是@ManyToMany。
我们使用 GWT 2.3、Spring 3、Hibernate 3.6.3 和 JPA 2.0 进行注释。
任何建议,将不胜感激。
提前致谢