我最近阅读了JPA2.0规范中的Criteria API,他们在这里引入了metamodel类(see here)的概念。我理解如何使用它,但我不明白为什么需要为Criteria API创建这个新概念。
答案 0 :(得分:2)
如果没有元模型,我们会访问name
实体的Employee
属性,如下所示,
Root<Employee> employee = query.from(Employee.class);
employee.get("name");
使用元模型,您可以将其缩短为
Employee_.name
其中Employee_
是Employee
实体的元模型
我认为不需要为实体创建根是使用元模型api的优势。
答案 1 :(得分:0)
Metamodel有助于编写类型安全代码
CriteriaQuery<Double> c = cb.createQuery(Double.class);
Root<Account> a = c.from(Account.class);
c.select(cb.avg(a.get(Account_.balance)));
这里编译器可以通过检查balance属性的类型来检查错误(例如,如果余额是String,应该有一些错误)