2013-03-28 38 views
2

我在我的java項目中使用Hibernate。我有以下實體結構:訪問惰性加載字段的ID時出現LazyInitialization異常

@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實體將不會被加載,因爲它是延遲加載的領域,但對於Engine的ID(主鍵)會加載。

現在,如果我做car.getEngine()。getId(),那麼它會拋出LazyInitialization異常。由於Id部分已經加載,爲什麼getId()會拋出異常?

+0

請發佈例外,如果你得到一個...另外,可能http://stackoverflow.com/questions/9250414/hibernate-getid-is-loading-the-object-even-though-it-is-lazy解釋你的問題(如果你的引擎類也註釋了你的字段) – MikeN 2013-03-28 10:47:18

回答

0

當我加載從數據庫

你真的確認這個對象滿載Car實體?

如果它是懶加載的,Engine id以及其他屬性尚未加載,因此例外。我建議你在每個級別上玩Hibernate.initialize(obj),看看究竟是哪裏出了問題。

相關問題