下划线连接到类名是什么意思?

我正在阅读“JPA 2.0中的动态,类型安全查询”一文,并偶然发现了这个例子:

EntityManager em = ... CriteriaBuilder qb = em.getCriteriaBuilder(); CriteriaQuery c = qb.createQuery(Person.class); Root p = c.from(Person.class); Predicate condition = qb.gt(p.get(Person_.age), 20); // ^^ --- this one c.where(condition); TypedQuery q = em.createQuery(c); List result = q.getResultList(); 

我想知道,这里的下划线究竟是什么意思?

由于下划线是类名的有效部分,我不明白为什么可以在JPA中使用它。 我在我的代码中使用现有实体检查了这一点,当然我的类无法解析为ClassName_

这是持久性的元模型 。 这是你如何用Java键入安全的JPA查询。 它允许查询静态检查您的查询,因为类Bar_描述了您的JPA Bar 。 在HQL中,您可以轻松地输入错误的查询,并在运行之前不知道它。

从技术上讲, _并不意味着什么,但它是JPA用来命名JPA持久模型类的元模型类的约定。 Model_Model的元Model ,它提供可查询字段及其类型的名称。

我发现这种方式可以在本文中声明元模型。

 /** * A meta model class used to create type safe queries from person * information. * @author Petri Kainulainen */ @StaticMetamodel(Person.class) public class Person_ { public static volatile SingularAttribute lastName; }