将两个字段从一个表映射到其他

时间:2016-07-15 18:29:39

标签: java hibernate postgresql cascade

我有这两个表

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的特定字段。

1 个答案:

答案 0 :(得分:0)

我建议完全避免使用级联(如果可能)......当您下订单时,您应该按照以下步骤操作:

1)从数据库加载您的用户

2)创建您的订单......

3)将您的订单与您的用户相关联(即order.setOrderBy(user)

4)使用EntityManager保留您的订单。

5)更改您的用户属性。

根据我的经验,应谨慎使用Cascade。我只在一次拍摄中使用它作为持久性实体(Cascade.PERSIST)(例如:将新用户与订单等其他新实体持久化)