У меня возникла проблема с конфигурациями сопоставления аннотаций спящего режима. Представьте себе следующие два класса на социальной медиа-платформы:Hibernate - встраивание агрегированной колонки в объект
@Entity
class User {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany
private List<Post> posts; //lazy-loaded, because of big amounts
}
@Entity
class Post {
@Id
@GeneratedValue
private Long id;
//large amounts of data
private String text;
private Date date;
@ManyToOne
private User author;
}
Самая интересная информация в моем Прецедент является самым последним Post писал каждый пользователь. Я мог читать в пользователей и добавлять пользовательский запрос так же, как это:
SELECT mx.userId,text,mx.date FROM
(SELECT user.id AS userId,max(date) AS date
FROM post,user
WHERE post.author=user.id
GROUP BY user.id) mx,
Post p
WHERE p.author=mx.userId
AND p.date=mx.date;
Мой вопрос теперь в том, как я могу вставить последнее сообщение в отображенной пользователем в поле.
Новый пользователь:
@Entity
class User {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany
private List<Post> posts;
//@Filter?
//@Query?
private Post latestPost;
}
Я не хочу, чтобы присоединиться данные от моего «последнего post'-агрегации с моим User-объектов в Java. Это не кажется правильным. Поэтому я ищу решение для внедрения этого агрегированного поля в мой базовый объект. Где можно указать пользовательский поиск пользовательских объектов в спящем режиме, чтобы добавить такое агрегированное поле?
Вы можете представить себе аналогичную проблему, например. встроенные суммы торговых сумм конкретного клиента в CRM.
Надеюсь, я мог бы проиллюстрировать свои мысли и проблемы. Заранее спасибо!
Можно ли OT создать подзапрос и присоединиться к @ Где-п? И как? Это хорошая идея? –
Я бы подумал, что это возможно - см. Мой ответ. Я не тестировал запрос - возможно, существует необходимость в «финализации» ... –