Эквивалент аннотации Hibernate <set> <subselect>

Мы пытаемся перейти на аннотации Hibernate из файлов .hbm.xml.

Я ищу аннотационный эквивалент следующего XML:

<set name = "someSet">
    <subselect>
        <![CDATA[some long SQL query]]>
    </subselect>
    <key column = "fk" />
    <element type = "MyUserType" column = "value" />
</set>

Я знаю, что есть @Subselect, но не знаю, как использовать его для моей проблемы.

Я нашел этот вопрос, но, насколько я понимаю, я хочу определять View не для всей сущности, а только для этого одного поля.

Объявление его на MyUserType не приводит к достижению моей цели, поскольку это применимо везде, где используется MyUserType. Мне нужно создать подкласс MyUserType, или есть лучший способ?

почему бы тогда не погуглить?

XtremeBaumer 28.03.2018 10:44

@XtremeBaumer Я добавил дополнительную информацию к своему вопросу. Я искал какое-то время безрезультатно.

Marius Schär 28.03.2018 11:02

вы не можете добавить @Subselect в определенное поле. Он используется для всего объекта. Лучшее, что вы можете сделать, если вам действительно нужен подвыбор для этого поля, - это создать View, а затем сопоставить это поле с представлением с помощью @ElementCollection и @CollectionTable.

XtremeBaumer 28.03.2018 11:21

При чем здесь JPA? поскольку вам явно нужна «аннотация Hibernate» и цитируется только Hibernate HBM XML

user8558216 28.03.2018 12:32

@ DN1 Мысль заключалась в том, что может быть решение только для JPA-спецификации, но я удалил тег.

Marius Schär 28.03.2018 13:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
317
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

@OneToMany(mappedBy = "department", fetch = FetchType.LAZY)
@Fetch(FetchMode.SUBSELECT)
private List<Employee> employees = new ArrayList<>();

https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#fetching-fetchmode-subselect

Вопрос не в этом.

Marius Schär 28.03.2018 12:09
Ответ принят как подходящий

Чтобы решить эту проблему, мы решили использовать представления базы данных.

К сожалению, он отделяет запрос от кода, но это метод с наименьшими шансами случайно что-то сломать.

Насколько я могу судить, прямой аннотации @Subselect для замены этой конструкции hbm не существует.

Другие вопросы по теме