2016-03-02 54 views
0

我正在使用JPA將數據持久化到數據庫的Java EE項目。我定義了以下兩個持久化實體(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********************** 
} 

從代碼可以看出,我懶惰加載通知的行動。在我的場景中,有數千個Action的通知,我不想加載所有這些通知。我只想根據Notification中的notifDate加載特定的通知。

任何人都可以請建議我一個更好的方式來處理這個?

回答

0

這聽起來像是過濾器的完美用例,只要它們受到JPA提供者的支持。

例如,在休眠中,您可以簡單地在notifications集合上定義filter,並在應用程序中默認爲所有Session啓用它。根據您用於事務管理的框架,您可以添加一個攔截器/掛鉤,以便在啓動事務時啓用篩選器。