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

2022-08-31 23:41:59

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

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

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

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


答案 1

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

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


答案 2

在本文中找到了这种声明元模型的方法。

/**
 * 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<Person, String> lastName;
}

推荐