OneToMany/ManyToOne关联

本文探讨了在ORM框架中一对一和一对多关联管理的最佳实践,包括如何通过级联保存和删除来优化关联对象的生命周期管理。文章详细介绍了如何在多端进行关联管理,并讨论了级联操作的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • @ManyToOne 以及 @OneToMany
//一般选择在多端进行管理,一端放弃,使用级联保存等,即多端添加一个外键列
//Item <-1----------*-> Bid
@Entity
class Item{
    //该集合方便查询,orm的意义.

    // mappedBy表明其放弃管理关联,由多端进行管理

    //cascade表明了级联操作,PERSIST使用时必须建立起Bid到Item的关联,否则将引入无效Bid。
    //Bid bid = new Bid();
    //bid.setItem(item);该语句是必须的!!!否则保存到bid表的bid将没有到item表的外键关联,为一条无效数据。
    //item.bids.add(bid);
    //REMOVE的操作要谨慎,因为REMOVE必须先从数据库中load/get对象,获得其对应的bids,然后逐条删除bid。
    //而使用sql 可以简单实现为一条语句 delete from bid where item_id = :item_id.效率差别大。
    //而且这体现了Bid的生命周期依赖于Item,可以声明Bid为一个组件类,从而优化删除过程

    //orphanRemoval = true,表明当从bids中移除一个bid时,将该bid从数据库中移除,该属性有争议,原因同以上第二条。
    @OneToMany(cascade = {CascadeType.REMOVE,CascadeType.PERSIST},mappedBy = "item",orphanRemoval = true)
    //使bid表在生成外键关联时,使用数据库外键级联,实现数据库级别的级联删除。(外键定义时使用级联策略)
    //其比CascadeType.REMOVE的效率高,但同理最好将Bid声明为一个组件类
    @OnDelete(action = OnDeleteAction.CASCADE)
    //由于其不是管理方,所以实际的结果无序。
    private List<Bid> bids;

}

@Entity
class Bid{
    //用于指定外键列的名称
    @JoinColumn(name = "item_id")
    //获取策略默认为EAGER
    @ManyToOne(fetch = FetchType.LAZY)
    private Item item;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值