2016-07-15 114 views
0

我有這2個表映射兩名來自一個表中的字段上其他

Users(
    id PK, 
    name VARCHAR(30) 
); 

其他表

Orders(
    id PK, 
    orderBy FK Users.id, 
    orderTo FK Users.id 
); 

現在,我想要做的是創建映射Orders實體類orderByorderTo給用戶。但我最迷惑的是我應該使用什麼級聯。

class Orders{ 
    /// 
    @ManyToOne(fetch = FetchType.Lazy 
    @JoinColumn(name="orderBy") 
    Users orderBy; 

    /// 
    @ManyToOne(fetch = FetchType.Lazy 
    @JoinColumn(name="orderTo") 
    Users orderTo; 

} 

我想在Users表中創建兩個字段,使得

class Account{ 
    /// 
    @OneToMany(fetch = FetchType.Lazy) 
    @JoinColumn(name="orderTo") 
    List<Orders> ordersReceived; 

    /// 
    @OneToMany(fetch = FetchType.Lazy) 
    @JoinColumn(name="orderBo") 
    List<Orders> ordersPlaced; 

} 

但同樣,我不知道我該用什麼級聯。我的Users表將由一些其他進程填充,因此orders與此無關。我不想要我下訂單時,該特定的交易應該添加/刪除任何東西。但是,只要我下訂單,我可能需要更新User的特定字段。

回答

0

我會建議從根本上避免使用級聯(如果可能的話)...當你下訂單時,應遵循以下步驟:

1)加載您的用戶從數據庫

2)創建您的訂單...

3)銜接您爲了您的用戶(這是,order.setOrderBy(user)

4)堅持與EntityManager您的訂單。

5)更改您的用戶屬性。

從我的經驗,梯級應謹慎使用。我只用它在一個拍攝(Cascade.PERSIST)(例如:堅持以看樣訂貨另一個新的實體新用戶)堅持實體

+0

謝謝你,所以我不應該具體'cascade'呢?如果我沒有指定任何東西,那麼實體的默認'cascade'值是多少? –

+0

沒有默認...所以它會像Cascade「Nothing」一樣! (如果您認爲這有幫助,請不要忘記投給我!) –

相關問題