字符串字段的 jpametamodel null SingularAttribute

jpametamodel null SingularAttribute for String field

我有 class 个实体:

@Entity
public class Patient {

   private int id;
   private int mrn;
   private String firstName;
   private String lastName;
   private String middleName;
   private int ssn;
   private Date dateOfBirth;
   private Date dateOfDeath;
   private Sex sex;
   private Set<Visit> visits;
 
 ...
}

使用 jpametamodel:

  EntityManager em = emf.createEntityManager();
  CriteriaBuilder cb = em.getCriteriaBuilder();
  CriteriaQuery<Patient> cq = cb.createQuery(Patient.class);
  Root<Patient> root = cq.from(Patient.class);
  // its work
  Predicate prMrn = cb.equal(root.get(Patient_.MRN), mrn);
  // NullPointerException
  Predicate pFn = cb.equal(root.get(Patient_.firstName), fn);

它与 Patient_.MRN 的正确工作。 但是我有字段 Patient_.firstName.

的运行时 NullPointerException

使用 hibernate-jpamodelgen 版本 5.4 生成的 jpametamodel。30.Final

生成class

public abstract class Patient_ {

    public static volatile SingularAttribute<Patient, String> firstName;
    public static volatile SingularAttribute<Patient, String> lastName;
    public static volatile SetAttribute<Patient, Visit> visits;
    public static volatile SingularAttribute<Patient, Date> dateOfDeath;
    public static volatile SingularAttribute<Patient, Integer> MRN;
    public static volatile SingularAttribute<Patient, String> middleName;
    public static volatile SingularAttribute<Patient, Date> dateOfBirth;
    public static volatile SingularAttribute<Patient, Integer> id;
    public static volatile SingularAttribute<Patient, Integer> SSN;



// its erorr! right "FirstName"
    public static final String FIRST_NAME = "firstName";
    public static final String LAST_NAME = "lastName";
    public static final String VISITS = "visits";
    public static final String DATE_OF_DEATH = "dateOfDeath";
    public static final String M_RN = "MRN";
    public static final String MIDDLE_NAME = "middleName";
    public static final String DATE_OF_BIRTH = "dateOfBirth";
    public static final String ID = "id";
    public static final String S_SN = "SSN";
}

成功了:

Predicate pFn = cb.equal(root.get("FirstName"), fn);