JPA @Formula без имени схемы или настройка с помощью класса сущности - PullRequest
1 голос
/ 31 октября 2019

У меня есть две таблицы, A_TABLE и B_TABLE. в A_TABLE классе сущностей нужно по формуле, которая имеет B_TABLE комбинацию столбцов, как показано ниже:

Рабочий код:

A_TABLEEntity {

    @Column("BM_NAME_I")
    private String bmdName;

    @Formula("(select b.LAST_NAME || ', '||b.FIRST_NAME||' ('||b.BM_NAME||')' 
    from BR_SCHEMA.B_TABLE  b where UPPER(b.BM_NAME)=UPPER(BM_NAME_I))")

    private string nameCombinationB;

}

Требуется решение вФормула:

1) Можно ли каким-либо образом предоставить B_TABLEEntity класс вместо B_TABLE напрямую и столбцы из B_table класса сущности?

И у меня естьпробовал с классом сущностей свою ошибку выдачи, - таблица или представление не существует

2) Можно ли избежать присвоения SCHEMA имени в B_TABLE раньше в формуле?

и безвыдает ошибку схемы - таблица или представление не существует

Пожалуйста, помогите мне выше @Formula код JPA

1 Ответ

2 голосов
/ 31 октября 2019

Вы обязательно должны посмотреть здесь: https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#mapping-column-formula

Согласно описанному комментарию, @Formula принимает только собственный sql, и в некоторых случаях статья предупреждает вас о подключении к конкретной базе данных.

Вы должны знать, что аннотация @Formula принимает собственное предложение SQL, которое может повлиять на переносимость базы данных.

Поскольку @Formula требует собственного SQL, вы всегда должны включать схему. Я думаю, что у некоторых БД есть схема по умолчанию, которую не нужно явно определять.

Для некоторых сложных операций я бы, вероятно, предоставил бы некоторую аннотацию, такую ​​как @PostLoad, и загружал нужные свойства, используя старый добрый entitymanager или прямой jdbc.

Может быть, эти ссылки могут помочь: https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#basic

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#fetching

...