0

次のコードを検討してください。

@Entity
@Table(name = "a")
public class A implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    public int id;

    @Transient
    public B b;

    public B getB()
    {
        return B;
    }
}

A をフェッチすると、B (別の休止状態のエンティティ) を手動で埋めています。ab を使用してアクセスしようとすると失敗しますが、a.getB(); を使用すると失敗します。その後、成功します。

どうしてこれなの?

4

3 に答える 3

1

遅延フェッチの問題のように聞こえます。public 参照に直接アクセスしようとすると null になりますが、「get」でアクセスすると、Hibernate はデータベースを呼び出してそのインスタンスをハイドレートすることを認識します。

于 2009-07-03T18:05:20.277 に答える
1
  1. クラス メンバーは非公開にする必要があります。
  2. オブジェクトが Hibernate セッションにアタッチされている場合は、プロキシで作業しています。そのため、クラス メンバーに直接アクセスしたい場合 (これは悪いことです!)、最初にオブジェクトをデタッチする必要があります。
于 2009-07-03T18:14:02.280 に答える