我偶然發現了一個非常惱人的情況:我使用Hibernate & Spring作爲我的應用程序的後端,並且似乎在某些情況下,與特定關係的實體實體不是從數據庫中作爲普通實體對象獲取,而是作爲Javassist類型獲取。例如:獲取Javassist類型而不是實際的Hibernate實體類型
我有以下關係活動實體:
@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進行註釋。
任何建議,將不勝感激。
在此先感謝
FetchType.LAZY是JPA默認值。除非您指定FetchType.EAGER,否則它不會執行任何操作。 – viktor