我正在开发一个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仅加载特定通知。
有人可以建议我更好的处理方法吗?
答案 0 :(得分:0)
如果JPA提供商支持过滤器,这听起来就像过滤器的完美用例。
例如,在Hibernate中,您只需在notifications
集合上定义filter,并默认为应用程序中的所有Session
启用它。根据您用于事务管理的框架,您可以添加一个拦截器/钩子,在启动事务时启用过滤器。