У меня есть две сущности: событие и комментарий.
@Entity
@Table(name = "events")
public class Event extends BaseEntity {
@Id
@Column(name = "event_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long eventId;
@Column(name = "title", length = 200)
protected String title;
@OneToMany(mappedBy = "event", cascade = CascadeType.REMOVE)
@LazyCollection(LazyCollectionOption.FALSE)
protected List<Comment> comments;
}
@Entity
@Table(name = "comments")
public class Comment extends BaseEntity {
@Id
@Column(name = "comment_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long commentId;
@ManyToOne(optional = false)
@JoinColumn(name = "event_id", referencedColumnName="event_id", nullable = false)
protected Event event;
@Column(name = "update_time", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
protected Date updatedTimestamp;
}
Таким образом, у каждого события есть список комментариев, и у каждого комментария есть время обновления.
Я хочу использовать Criteria API для создания запроса, который выбирает все события, которые имеют по крайней мереодин новый комментарий.(Новый комментарий означает, что время его обновления позже указанного времени)
Спасибо за помощь.
Извините, вопрос, который я задал выше, не завершен: то, что я хочу, этоиспользуйте Criteria API для создания запроса, который выбирает все события, которые имеют хотя бы один новый комментарий , а eventId равен некоторому конкретному идентификатору события .
Я пытался: (Учитывая Date lastCheckedTime
иLong eventId
)
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Event> cq = cb.createQuery(Event.class);
Root<Comment> c = cq.from(Comment.class);
Predicate lastCheckedTimeCondition = cb.greaterThanOrEqualTo(
c.get(Comment_.updatedTimestamp), lastCheckedTime);
cq.where(lastCheckedTimeCondition);
cq.select(c.get(Comment_.event));
TypedQuery<Event> query = em.createQuery(cq);
result = query.getResultList();
Приведенный выше код может выбирать события с новыми комментариями, но теперь я не знаю, как добавить условие об идентификаторе события.