我看了一下JPA 2.0 Criteria API,但是与Hibernate Criteria不同,我发现它太麻烦了。是否有充分的理由使用JPA 2.0
Criteria API而不是使用JPA-QL?感谢您的意见。
与Hibernate Criteria API一样,JPA 2.0 Criteria API特别适合 动态
构建查询,以处理查询结构根据运行时条件而变化的情况。
但是还有更多。尽管比Hibernate的Criteria API更为冗长,但JPA Criteria API允许构建 类型安全的
查询(如果您使用Metamodel API)。下面是一个例子:
EntityManager em = ...
QueryBuilder qb = em.getQueryBuilder();
CriteriaQuery<Person> c = qb.createQuery(Person.class);
Root<Person> p = c.from(Person.class);
Predicate condition = qb.gt(p.get(Person_.age), 20);
c.where(condition);
TypedQuery<Person> q = em.createQuery(c);
List<Person> result = q.getResultList();
在上面的代码段中,以下示例会引发编译错误:
Predicate condition = qb.gt(p.get(Person_.age, "xyz"));
如果您想知道,Person_
是 静态的,实例化的,规范的元模型类,它
对应于原始Person
实体类(由注释处理器生成)。它提供了一种强类型替代基于运行时反射的方法:
Field field = Person.class.getField("age");
优点:
缺点:
总的来说,我对JPQL感到更自在,但Criteria API的类型安全性与JPQL(以及Hibernate Criteria API)是一个主要区别。
问题内容: 我最近一直在看Zookeeper,想知道当前是否有人在使用它,以及他们专门用于存储什么。 最常见的用例是用于配置信息,但是要存储哪种数据和存储多少数据? 问题答案: DOSGi 的Apache CXF实现使用zookeeper为其服务注册存储库。各个容器具有一个分布式软件(dsw)捆绑包,该捆绑包监听所有服务事件以及服务状态更改时的状态,该属性具有指示分发的属性。dsw与发现包进行通信
问题内容: 以封装为例,我可以想到用户与手机之间的交互。用户不需要知道手机的内部工作即可操作,因此这称为抽象。但是封装适合本例吗?有人可以对此进行说明吗? 问题答案: 封装是一种实现“信息隐藏”的方法,因此,按照您的示例,您不需要“知道移动电话的内部工作原理”。您有一个界面来使用设备行为而无需了解实施细节。 另一方面,抽象可以解释为对不同对象使用相同接口的能力。可以存在同一接口的不同实现。细节通过
问题内容: 我来自静态语言的背景。有人可以(理想情况下通过示例)解释 使用 kwargs优于命名参数 的现实 优势** 吗? 在我看来,这似乎只会使函数调用变得更加模糊。谢谢。 问题答案: 实际示例: 装饰器-它们通常是通用的,因此您不能预先指定参数: 您想使用未知数量的关键字参数进行魔术操作的地方。Django的ORM可以做到这一点,例如:
问题内容: 我只是对JMS和Apache ActiveMQ有所了解。并且想知道这里的人们将JMS或类似的消息队列技术用于什么吗? 问题答案: JMS(ActiveMQ是JMS代理实现)可以用作允许异步请求处理的机制。您可能希望执行此操作,因为请求需要很长时间才能完成,或者因为实际的请求可能涉及多个方面。使用它的另一个原因是允许多个客户端(可能以不同的语言编写)通过JMS访问信息。ActiveMQ是
第 2 章 用数据表示现实世界 第 1 章说过,计算是利用计算机解决问题的过程。待解决的问题可能来自不同领域,因 而具有不同的形式和内容,但从计算的角度看,解决任何问题的过程都是对特定信息进行特 定处理的过程。可见,计算涉及到两样东西:信息和对信息的处理过程。因此实现计算的程 序相应地也要做两件事情:第一,用特定数据类型和数据结构将信息表示出来;第二,用控 制结构将信息处理过程表示出来。 本章是关
以封装为例,我可以想到用户和手机之间的交互。用户不需要知道手机的内部工作情况就可以进行操作,因此这称为抽象。但是封装在这个例子中的什么地方呢?有人能解释一下吗?