2012-03-13 66 views
0

爲了說明我的問題考慮下面的例子:當不級聯字段時,您是否需要使用@Transient?

@Entity 
public class Box implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    @OneToMany //No cascade 
    private List<Item> items; 

    . 
    . 
    . 
} 

上面我們有一個Box具有一個一對多協會Item

現在說你搶了Box對象,並開始填寫它與Item s並試圖堅持下去。它會告訴你,你不能這樣做,因爲你有一些沒有級聯的非瞬態嵌套對象(或類似的東西)。

在這種情況下,你只需要(無持久性)的關聯,但要使用這些字段,而對象是活的,你會怎麼做時,你要堅持呢?

您是否列出Item?你用@Transient註解它嗎?

這是我的問題。謝謝!

回答

1

如果你的項目對象不是一個數據庫實體,你應該標註集合爲@Transient。如果Item對象映射到數據庫中,則應使用@OneToMany註釋,以便從數據庫讀取該集合。若要防止在保存Box對象時存儲此集合,您可以添加@JoinColumn註釋並將可插入和可更新屬性設置爲false:

@OneToMany 
@JoinColumn((name="BOX_ID", insertable=false, updatable=false) 
private List<Item> items; 
相關問題