延迟加载部分结果集或条件结果集

时间:2016-03-02 18:20:36

标签: jpa lazy-loading one-to-many

我正在开发一个Java EE项目,该项目使用JPA将数据持久化到数据库。我定义了以下两个持久性实体(Action和Notification)。

@Entity
@Table(name="Action")
public class Action{

    @OneToMany(mappedBy="businessAction", fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, orphanRemoval=true)
    private List<Notification> notifications;

    //***************SOME OTHER STUFF**********************
}

@Entity
@Table(name="Notif")
public class Notification{

    @Column(name="NOTIF_DATE")
    private Date notifDate;         

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name="FOR_ACTION_ID")
    private Action action;

    //***************SOME OTHER STUFF**********************
}

从代码可以看出我懒得加载Notifications for Action。在我的场景中,有数千个Action通知,我不想加载所有这些通知。我想根据通知中的notifDate仅加载特定通知。

有人可以建议我更好的处理方法吗?

1 个答案:

答案 0 :(得分:0)

如果JPA提供商支持过滤器,这听起来就像过滤器的完美用例。

例如,在Hibernate中,您只需在notifications集合上定义filter,并默认为应用程序中的所有Session启用它。根据您用于事务管理的框架,您可以添加一个拦截器/钩子,在启动事务时启用过滤器。