我有这两个表
Users(
id PK,
name VARCHAR(30)
);
另一张表是
Orders(
id PK,
orderBy FK Users.id,
orderTo FK Users.id
);
现在,我要做的是创建Orders
实体类,将orderBy
和orderTo
映射到用户。但我最困惑的是我应该使用的级联。
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 :(得分:0)
我建议完全避免使用级联(如果可能)......当您下订单时,您应该按照以下步骤操作:
1)从数据库加载您的用户
2)创建您的订单......
3)将您的订单与您的用户相关联(即order.setOrderBy(user)
)
4)使用EntityManager
保留您的订单。
5)更改您的用户属性。
根据我的经验,应谨慎使用Cascade。我只在一次拍摄中使用它作为持久性实体(Cascade.PERSIST
)(例如:将新用户与订单等其他新实体持久化)