私は本当に厄介な状況に出くわしました: 私はアプリのバックエンドとして 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 だけでなく、他のタイプの関係でも発生しました。
アノテーションには GWT 2.3、Spring 3、Hibernate 3.6.3、および JPA 2.0 を使用しています。
任意の提案をいただければ幸いです。
前もって感謝します