开发者社区> 问答> 正文

了解嵌套注释的结构/语法

我遇到了以下春季休眠注释:

@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") })

我发现很难理解注释的结构/语法。这些注释遵循哪种类型的属性嵌套?它是春季表达语言吗?我试图浏览spring表达式语言文档,但仍然无法获取。

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 23:06:02 414 0
1 条回答
写回答
取消 提交回答
  • 示例代码中有四个注释在起作用:@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")
    })
    

    我认为您的困惑来自以下事实:两个查询的名称均以@like 开头,@HQL_GET_ALL_ADDRESS但这根本不是必需条件。您可以根据需要命名查询bob。

    除此之外,顾名思义,您可以定义a的多个@NamedQuery内部,@NamedQueriesfor也是如此@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注释语法,您可以在此处查看带有示例的参考。

    回答来源:Stack Overflow

    2020-03-25 23:07:52
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载