У моего Java-бина есть свойство childCount. Это свойство не сопоставляется со столбцом базы данных . Вместо этого он должен быть вычислен базой данных с помощью COUNT()
функции, работающей на объединении моего Java-компонента и его дочерних элементов. Было бы еще лучше, если бы это свойство можно было рассчитывать по запросу / «лениво», но это не обязательно.
В худшем случае я могу установить свойство этого bean-компонента с помощью HQL или Criteria API, но я бы предпочел этого не делать.
@Formula
Аннотации Hibernate могут помочь, но я почти не нашел документации.
Любая помощь очень ценится. Спасибо.
@Formula
аннотации используется SQL, а не HQL.Как объясняется в этой статье , у вас есть три варианта:
@Transient
метода@PostLoad
прослушиватель сущностей@Formula
аннотацию HibernateХотя Hibernate позволяет использовать @Formula , с JPA вы можете использовать обратный вызов @PostLoad, чтобы заполнить временное свойство результатом некоторых вычислений:
Для более сложных запросов вы можете использовать Hibernate
@Formula
, как описано в этой статье :источник
Взгляните на Blaze-Persistence Entity Views, который работает поверх JPA и обеспечивает первоклассную поддержку DTO. Вы можете спроецировать что угодно на атрибуты в Entity Views, и даже если это возможно, существующие узлы соединения будут повторно использоваться для ассоциаций.
Вот пример отображения
Получение этого сгенерирует запрос JPQL / HQL, подобный этому
Вот сообщение в блоге о поставщиках настраиваемых подзапросов, которые могут быть вам интересны: https://blazebit.com/blog/2017/entity-view-mapping-subqueries.html
источник
я пробовал это на своем коде
ошибки, которые я получаю, когда я запускаю и отображаю свое представление, даже до того, как пытаюсь отобразить столбец на усах, выглядят примерно так
вопрос, который я задал, заключался в том, есть ли способ получить значения столбца Calculated с помощью JPA / Hibernate с mySQL?
Что я делаю не так ?
источник