我将尝试直接用代码描述我的问题,然后说我需要什么,请注意,我已将我的代码最小化,以解决我遇到的问题:
我从 Entity 获取提要列表:
@Entity
public class Feed {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToOne
@JoinColumn(name = "event_id")
private Event event;
@ManyToOne
@JoinColumn(name = "event_trigger_id")
private EventTypeTrigger eventTrigger;
}
在这里,我试图让这个实体充满正确的count
值。
@Entity
public class EventTrigger {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(nullable = false)
private String title;
@Transient
private int count;
}
存储计数数据的提要实体。
@Entity
public class EventTriggerFeed {
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(nullable = false)
private int count;
@ManyToOne
@JoinColumn(name = "event_id", nullable = false)
@JsonBackReference
private Event event;
@ManyToOne
@JoinColumn(name = "event_trigger_id", nullable = false)
@JsonBackReference
private EventTrigger eventTrigger;
}
从我尝试调用的服务中:
public List<Feed> findUserFeeds(int userId) {
return Ebean.find(Feed.class).findList();
}
我可以像这样获得每个触发器的计数:
public int getCountFromEventTriggerFeed(int triggerId, int eventId) {
return Ebean.find(EventTriggerFeed.class)
.where().eq("eventTrigger.id",triggerId).eq("event.id",eventId)
.findUnique().getCount();
}
我只是想获取Feed
具有Event
信息和EventTrigger
信息的列表,并且count
属性填充了来自的计数值EventTriggerFeed
我只是在没有太多迭代的情况下坚持了完美的方式,我正在考虑获取每个EventTrigger
内行的计数值Feed
,但这可能会导致我打很多电话:
for (Feed feed : findUserFeeds(userId)) {
int eventId = feed.getEvent().getId();
int triggerId = feed.getEventTrigger().getId();
feed.getEventTrigger().setCount(getCountFromEventTriggerFeed(triggerId, eventId))
}
但是你能想象如果我有 50 个提要吗?
有没有关于如何优化这个头痛的想法?