2

Java プロジェクトで Hibernate を使用しています。私は次のエンティティ構造を持っています:

@Entity
@Table(name = "car")
public class Car implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "engine_id", nullable = false)
    private Engine engine;
}

CarデータベースからエンティティをロードEngineすると、遅延ロードされたフィールドであるため明らかにエンティティはロードされませんが、id (主キー)Engineがロードされます。

ここで car.getEngine().getId() を実行すると、LazyInitialization Exception がスローされます。Id 部分は既にロードされているため、getId() が例外をスローするのはなぜですか?

4

1 に答える 1

0

Carデータベースからエンティティをロードするとき

このオブジェクトが完全にロードされていると確信していますか?

遅延ロードの場合、Engineid と他の属性がまだロードされていないため、例外が発生します。Hibernate.initialize(obj)あらゆるレベルで遊んで、失敗が正確にどこにあるかを確認することをお勧めします。

于 2013-03-28T10:32:45.887 に答える