JPA @JoinColumn пользовательский тип объекта - PullRequest
0 голосов
/ 29 мая 2019

Я изучаю проект, использующий 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 я проверяю? Мне не хватает ссылки со структурой базы данных.

1 Ответ

2 голосов
/ 29 мая 2019

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

Этот запрос возвращает объекты, где 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"/>
...