Пользовательский тип объекта JPA @JoinColumn

Я изучаю проект, использующий JPA, в котором я новичок. Я столкнулся с логикой, которую я не очень хорошо понимаю. У меня есть объект с именем A, который имеет это поле/столбец:

@Column(name = "COD_UOP_COO")
    private String codUopCoo;

то у меня есть в том же объекте:

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "COD_UOP_COO", referencedColumnName = "COD_UOP")
    @BatchFetch(value = BatchFetchType.JOIN)
    private B b;

Насколько я понял, это означает, что поле b извлекается путем объединения таблиц A и B по полям, указанным в аннотации JoinColumn, верно? Но как в этом случае работает соединение? Получает ли JPA объект в правой части предложения соединения?
Затем у меня есть такой именованный запрос:

"select a from A a where (a.b.bfield = :parameter)"

Что это значит? Почему они проверяют равенство в поле объекта B? В моей таблице A у меня нет столбца, который является внешним ключом с B. И поле b не является столбцом в таблице A. Итак, какое значение столбца A я проверяю? Мне не хватает ссылки со структурой базы данных.


person Usr    schedule 29.05.2019    source источник


Ответы (1)


Запрос JPQL транслируется в запрос SQL.

Этот запрос возвращает объекты A, где A.COD_UOP_COO = B.COD_UOP и B.bfield = параметр. Измените bfield на имя столбца базы данных элемента в классе B.

Вы можете увидеть собственный запрос, добавляющий эти параметры в файл persistence.xml:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
person Egeo    schedule 29.05.2019
comment
Привет спасибо. Есть ли руководство, объясняющее правила перевода? - person Usr; 29.05.2019