@JoinFormula в режиме гибернации

#java #hibernate #jpa

#java #переход в режим гибернации #jpa

Вопрос:

Я начинаю работу с Hibernate, и у меня такая проблема, я не понимаю такую строку в коде, который я анализирую:

 @JoinFormula( "REGEXP_REPLACE(phoneNumber, '\ (\d )-.*', '\1')::int" )
  

Источник, который я использую, является: https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#embeddables

Я не знаю, где зависимость между идентификатором страны и номером телефона. С уважением

Ответ №1:

Прочитав немного после этого фрагмента, вы обнаружите

country Ассоциация в User объекте отображается идентификатором страны, предоставленным phoneNumber свойством.

И

Следовательно, @JoinFormula аннотация используется для определения пользовательской ассоциации объединения между родительско-дочерней ассоциацией.


По сути, JOIN между User и Country выполняется этим вычисленным значением.

Например, a User с числом

  40-123-4567
  

JOIN отредактирован с помощью Country , у которого был идентификатор

 40
  

потому что REGEXP_REPLACE функция способна экстраполировать это 40 из числа.

::int является приведением типа.

Комментарии:

1. Итак, REGEXP_REPLACE возвращает значение на основе аргумента replace_string? Это вводит в заблуждение, потому что я понимаю, что replace_string изменяет текст (в первом аргументе)

2. @graluc REGEXP_REPLACE примет в качестве входных данных значение PhoneNumber и выведет другое значение, обработанное с помощью введенного регулярного выражения.

3. @graluc в этом случае он разделит строку на » -» и примет только первое вхождение, учитывая только числа.

4. @graluc привет! Подумайте о том, чтобы отметить ответ как принятый, если он разрешил ваши сомнения. В случае, если вам понадобятся другие классификации, дайте мне знать