Понимание структуры / синтаксиса вложенных аннотаций - PullRequest
2 голосов
/ 14 марта 2020

Я встречал следующие весенние спящие аннотации:

@NamedQueries({ @NamedQuery(name = "@HQL_GET_ALL_ADDRESS", query = "from Address") })
@NamedNativeQueries({ @NamedNativeQuery(name = "@SQL_GET_ALL_ADDRESS", query = "select emp_id, address_line1, city, zipcode from
Address") })

Мне было трудно понять структуру / синтаксис аннотации. Какой вид вложенности свойств следует за этими аннотациями? Это язык выражения весны? Я пытался от go до документации по языковым выражениям пружины , но я до сих пор не могу ее получить.

1 Ответ

1 голос
/ 14 марта 2020

В вашем примере кода есть четыре аннотации: @NamedQueries + @NamedQuery и @NamedNativeQueries + @NamedNativeQuery.

Hibernate предоставляет их непосредственно из Java Persitence API (JPA).

@NamedQueries({
   @NamedQuery(name = "@HQL_GET_ALL_ADDRESS", query = "from Address")
})
@NamedNativeQueries({
   @NamedNativeQuery(name = "@SQL_GET_ALL_ADDRESS", query = "select emp_id, address_line1, city, zipcode from Address")
})

Я думаю, что ваша путаница связана с тем фактом, что имена обоих запросов начинаются с @, как в @HQL_GET_ALL_ADDRESS, но это совсем не обязательно. , Вы можете назвать свой запрос bob, если хотите.

Кроме этого, как следует из названия, вы можете определить несколько @NamedQuery внутри @NamedQueries, и то же самое относится к @NamedNativeQueries.

@NamedQueries({
   @NamedQuery(name = "get_all_address", query = "from Address"),
   @NamedQuery(name = "get_all_active_address", query = "from Address where active = true")
})

Документацию Hibernate об именованных запросах можно найти здесь .

Чтобы немного расширить фигурные скобки внутри аннотаций java, они просто означают, что вы можете предоставить массив объектов вместо одного. Думайте об этом, как будто вы инициализируете новый массив следующим образом:

String[] items = {"one", "two", "three"};

Таким образом, вы предоставляете массив для аннотации. В данном конкретном случае, так уж получается, что @NamedQueries ожидает массив других аннотаций. Это, вероятно, более понятно, если вы проверите исходный код для @NamedQueries:

...
public @interface NamedQueries { 

    /** (Required) An array of <code>NamedQuery</code> annotations. */
     NamedQuery [] value (); 
}

Это стандартный синтаксис аннотации Java, здесь вы можете увидеть ссылку с примерами здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...