【问题标题】:Using Annotations In JPA can I limit child records with a where clause?在 JPA 中使用注释可以使用 where 子句限制子记录吗?
【发布时间】:2011-05-02 13:48:04
【问题描述】:

我的父类(时间段)中有一个具有类似 @onetomany 关系的 EJB:

@OneToMany(mappedBy = "rsTimeslots")
private List<RsEvents> rsEventsList;

我还有一个函数可以获取 rsEventList:

public void setRsEventsList(List<RsEvents> rsEventsList) {
    this.rsEventsList = rsEventsList;
}

到目前为止,这都是自动生成的。在我的视图层代码中,我可以获得一个时间段对象并执行timeslot.getRsEventList() 之类的操作,并获取该时间段的所有子项。现在我需要根据标准限制该列表。例如,我只想要状态为 1 的此时间段的子事件。有没有办法通过注释来做到这一点?

【问题讨论】:

  • 如果有人对此帖子有更新的答案,请发布。谢谢

标签: jpa


【解决方案1】:

不在 JPA 中。

通常您会为此执行查询,使用 JPQL 或条件 API。

一些 JPA 提供程序确实提供了限制关系的方法,但我认为你最好使用查询,或者在你的类上提供一个 get/filter 方法来访问列表并过滤它(即 getStatus1Events())。

有关在映射上具有标准的 EclipseLink 示例,请参阅, http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria

【讨论】:

  • 精氨酸。我以前很怕那个。感谢您的快速回复!
  • 在实体bean中我可以修改get来移除对象吗?这是一件坏事吗? public List&lt;RsEvents&gt; getRsEventsList() { // remove any events without status=1 List&lt;RsEvents&gt; eventList = new ArrayList&lt;RsEvents&gt;(); for (RsEvents event: rsEventsList){ if (event.getStatus()==(long)1){ eventList.add(event); } } return eventList; }
  • 接受的答案来自 2011 年 5 月。2014 年 8 月的 JPA 2.1 仍然如此吗?
猜你喜欢
  • 2012-08-15
  • 2011-06-25
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2023-03-13
  • 1970-01-01
  • 2012-04-28
相关资源
最近更新 更多