В вашем примере кода есть четыре аннотации: @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, здесь вы можете увидеть ссылку с примерами здесь .