在@NamedQueries中枚举@NamedQuery

介绍

如果您是使用JPA的Java开发人员,则很可能在实体上声明了一个或多个@NamedQuery对象。

要在类上声明@NamedQuery ,必须使用查询名称及其JPQL对该类进行简单注释,例如:

@Entity
@NamedQuery(name = "findAllProjects",
            query = "select p from Project p order by p.id")
public class Project

但是,如果我们想声明多个@NamedQuery批注,注释,我们用类@NamedQueries批注,然后包含集合@NamedQuery注释,如下所示:

@Entity
@NamedQueries({ 
    @NamedQuery(name = "findAllProjects",
                query = "select p from Project p order by p.id"),
    @NamedQuery(name = "findById",
                query = "select p from Project p where p.id=:id")
})
public class Project

枚举@NamedQuery批注

创建具有多个@NamedQuery批注的实体后,如何检查类中存在哪些批注?

幸运的是,使用反射,枚举类中的注释并找到有关它们的详细信息是一件相当简单的事情,如以下代码所示。

NamedQueries annotation = Project.class.getAnnotation(
                                            NamedQueries.class
                                                     );
for (Annotation annot : annotation.value()) {
  System.out.println(annot.toString());
  for (Method method : annot.annotationType().getDeclaredMethods()) {
    if (method.getName().equalsIgnoreCase("name") ||
        method.getName().equalsIgnoreCase("query")) {
        try {
        String result = method.getName() + 
                        " : " + 
                        method.invoke(annot,  null).toString();
        System.out.println(result);
      } catch (IllegalAccessException | IllegalArgumentException
            | InvocationTargetException e) {
        // Oops - something has gone wrong.
        break;
      }
    }
  }
}

运行上面的代码将产生以下输出:

@javax.persistence.NamedQuery(lockMode=NONE, hints=[], name=findAllProjects, query=select p from Project p order by p.id)
name : findAllProjects
query : select p from Project p order by p.id

@javax.persistence.NamedQuery(lockMode=NONE, hints=[], name=findById, query=select p from Project p where p.id=:id)
name : findById
query : select p from Project p where p.id=:id

翻译自: https://www.javacodegeeks.com/2015/03/enumerating-namedquery-within-namedqueries.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值