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

sta*_*ker 30 java jpa criteria-api

我正在阅读"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();
Run Code Online (Sandbox Code Playgroud)

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

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

Sle*_*led 24

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

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

  • 以下依赖将生成 **Person_** 类。在编写谓词时它非常有用。`&lt;dependency&gt; &lt;groupId&gt;org.hibernate&lt;/groupId&gt; &lt;artifactId&gt;hibernate-jpamodelgen&lt;/artifactId&gt; &lt;/dependency&gt;` (2认同)