我偶然发现了一个非常恼人的情况:我使用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<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。
我们使用GWT2.3、Spring3、Hibernate 3.6.3和JPA 2.0进行注释。
如有任何建议,我们将不胜感激。
提前感谢
发布于 2014-02-18 21:18:46
如果调用静态方法: HibernateProxyHelper.getClassWithoutInitializingProxy(entity);,您将获得被代理的实体的类以及类本身(如果没有被代理)。
https://stackoverflow.com/questions/8412334
复制相似问题