fetchtype 动态控制_hibernate FetchType理解

JPA定义实体之间的关系有如下几种: @OneToOne @ManyToOne @OneToMany @ManyToMany 在定义它们的时候可以通过fetch属性指定加载方式,有两个值: FetchType.LAZY:延迟加载 FetchType.EAGER:急加载 急加载就好理解了,在加载一个实体的时候,其中定义是急加载的的属性(property)和字段(field)会立即从数据库中加载 开发过程中遇到问题最多的就是延迟加载,并且问题都是一个: “为什么我定义为延迟加载了,但没起作用,相关的属性或者字段还是会立即加载出来?” 对于这个问题,我的理解是这样的,我们首先假设有如下的影射关系: @Entity @Table(name = "orders") class Order{

@OneToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch = FetchType.LAZY,mappedBy = "order") private Collection lineItems = new HashSet ();

@OneToOne(cascade={CascadeType.REMOVE},fetch=FetchType.LAZY,mappedBy="order") @JoinColumn(name="order_id") private OrderPrice salePrice;

@OneToOne(cascade={CascadeType.REMOVE},fetch=FetchType.LAZY) @JoinColumn(name="customer_id") private Customer customer; }

@Entity @Table(name = "order_items") class LineItem{

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},fetch = FetchType.LAZY) @JoinColumn(name = "order_id",referencedColumnName = "order_id") private Order order;

}

@Entity @Table(name = "order_finance") @AttributeOverride(name="id",column=@Column(name="order_id")) class OrderPrice extends Price{

private Order order;

@OneToOne(cascade={},fetch=FetchType.LAZY) @JoinColumn(name="order_id",referencedColumnName="order_id") public Order getOrder() { return order; }

public void setOrder(Order order) { this.order = order; }

}

@MappedSupperclass @Table(name = "order_finance") class Price{ @Id public Integer getId(){ ... } } 表的关系是:orders表是一个单独的表,order_items表有一个外键(order_id)引用到orders 表,order_finance有一个外键(order_id)引用到orders表. order_items——->orders

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值