В Hibernate есть способ вернуть объект или список объектов, которые не имеют данных, которые не сохраняются в таблице как часть объекта?возвращает не сохраняющиеся данные как часть объекта
, например, если у вас объект твиты следующим образом:
long id;
String message;
long profile_id;
//non-persisted properties
long numLikes;
boolean isLiked;
тогда был еще один объект для отслеживания того, кто понравился твит, такие как
long id;
long liked_id;
long profile_id;
boolean liked;
как бы я (могу ли я) настроить твист-объект, чтобы я мог видеть количество понравившихся элементов в твист-объекте? запрос будет выглядеть как-то
Select *, count(likes1.id) as numLikes, isNull(liked1.liked,0) as isLiked from tweets
left join (select id,liked_id from likes where liked_id = tweets.id) as likes1 on tweets.id = likes1 .liked_id
left join (select liked_id,liked from likes where profile_id = :authenticated_User) as liked1 on tweets.id = liked1.liked_id
where.....
есть в любом случае я могу засунуть все это в объекте без использования addScalar на каждую собственности в твитах объекта? если нет, то каков правильный способ сделать такую настройку?
(предполагая, что все свойства называются правильно в SQL запросе данные и возвращается, как и ожидалось, я знаю, что есть вещи в моем примере, что сломается.)
Используйте объекты для сопоставления столбцов соответствующей таблицы и ассоциаций с другими таблицами. Для остальных (агрегированные значения, такие как количество ретвитов или предпочтений), затем используйте запросы и возвращайте DTO, содержащие данные, возвращаемые запросом. –
Итак, вы сказали, что мне нужно разделить объект tweet на два объекта, чтобы сделать запрос, чтобы получить объект Tweet, а затем выполнить цикл через возвращаемый набор данных и сделать другой запрос для каждого твита, чтобы вернуть агрегированные значения? это простой способ, но есть ли способ обойти это? –
Нет, это не то, что я имел в виду. Я имел в виду, что вы должны выполнить запрос, который позволит получить необходимые данные из базы данных, если это возможно, и использовать класс DTO для хранения данных, содержащихся в каждой строке, возвращаемой этим запросом. Не все должно быть сущностью. –