2016-07-15 58 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”一样! (如果您认为这有帮助,请不要忘记投给我!) –

相关问题