title: How to use JPA Enum in a JPQL where clause?
body: <p>I have an enum as an attribute of an Entity. When I try to use the enum in a JPQL query, it gives an error. What is the correct method to use except passing it as a parameter?</p>
  
  <p>Enum is </p>
  
  <pre><code>package com.divudi.data;
  
  public enum Sex {
      Male,
      Female,
      Unknown,
      Other,
  }
  </code></pre>
  
  <p>Entity is</p>
  
  <pre><code>package com.divudi.entity.lab;
  
  import com.divudi.data.Sex;
  import com.divudi.entity.Item;
  import com.divudi.entity.WebUser;
  import java.io.Serializable;
  import java.util.Date;
  import javax.persistence.Entity;
  import javax.persistence.EnumType;
  import javax.persistence.Enumerated;
  import javax.persistence.Inheritance;
  import javax.persistence.InheritanceType;
  import javax.persistence.Lob;
  import javax.persistence.ManyToOne;
  import javax.persistence.Temporal;
  
  @Entity
  @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
  public class InvestigationItemValueFlag extends InvestigationItemValue implements Serializable {
  
      private static final long serialVersionUID = 1L;
      @Enumerated(EnumType.STRING)
      Sex sex;
      @ManyToOne
      InvestigationItem investigationItemOfLabelType;
      @ManyToOne
      private InvestigationItem investigationItemOfValueType;
      @ManyToOne
      InvestigationItem investigationItemOfFlagType;
      @ManyToOne
      Item item;
      long fromAge;
      long toAge;
      @Lob
      private String flagMessage;
      @Lob
      String highMessage;
      @Lob
      String lowMessage;
      @Lob
      String normalMessage;
      boolean displayFlagMessage;
      boolean displayHighMessage;
      boolean displayLowMessage;
      boolean displayNormalMessage;
  
      public InvestigationItem getInvestigationItemOfLabelType() {
          return investigationItemOfLabelType;
      }
  
      public void setInvestigationItemOfLabelType(InvestigationItem investigationItemOfLabelType) {
          this.investigationItemOfLabelType = investigationItemOfLabelType;
      }
  
  
  
      public String getHighMessage() {
          return highMessage;
      }
  
      public void setHighMessage(String highMessage) {
          this.highMessage = highMessage;
      }
  
      public String getLowMessage() {
          return lowMessage;
      }
  
      public void setLowMessage(String lowMessage) {
          this.lowMessage = lowMessage;
      }
  
      public String getNormalMessage() {
          return normalMessage;
      }
  
      public void setNormalMessage(String normalMessage) {
          this.normalMessage = normalMessage;
      }
  
      public boolean isDisplayFlagMessage() {
          return displayFlagMessage;
      }
  
      public void setDisplayFlagMessage(boolean displayFlagMessage) {
          this.displayFlagMessage = displayFlagMessage;
      }
  
      public boolean isDisplayHighMessage() {
          return displayHighMessage;
      }
  
      public void setDisplayHighMessage(boolean displayHighMessage) {
          this.displayHighMessage = displayHighMessage;
      }
  
      public boolean isDisplayLowMessage() {
          return displayLowMessage;
      }
  
      public void setDisplayLowMessage(boolean displayLowMessage) {
          this.displayLowMessage = displayLowMessage;
      }
  
      public boolean isDisplayNormalMessage() {
          return displayNormalMessage;
      }
  
      public void setDisplayNormalMessage(boolean displayNormalMessage) {
          this.displayNormalMessage = displayNormalMessage;
      }
  
  
  
  
  
      public Item getItem() {
          return item;
      }
  
      public void setItem(Item item) {
          this.item = item;
      }
  
  
  
      public InvestigationItemValueFlag() {
      }
  
      public Sex getSex() {
          return sex;
      }
  
      public void setSex(Sex sex) {
          this.sex = sex;
      }
  
      public long getFromAge() {
          return fromAge;
      }
  
      public void setFromAge(long fromAge) {
          this.fromAge = fromAge;
      }
  
      public long getToAge() {
          return toAge;
      }
  
      public void setToAge(long toAge) {
          this.toAge = toAge;
      }
  
      public String getFlagMessage() {
          return flagMessage;
      }
  
      public void setFlagMessage(String flagMessage) {
          this.flagMessage = flagMessage;
      }
  
      public InvestigationItem getInvestigationItemOfValueType() {
          return investigationItemOfValueType;
      }
  
      public void setInvestigationItemOfValueType(InvestigationItem investigationItemOfValueType) {
          this.investigationItemOfValueType = investigationItemOfValueType;
      }
  
      public InvestigationItem getInvestigationItemOfFlagType() {
          return investigationItemOfFlagType;
      }
  
      public void setInvestigationItemOfFlagType(InvestigationItem investigationItemOfFlagType) {
          this.investigationItemOfFlagType = investigationItemOfFlagType;
      }
  
  
  
  
  
  }
  </code></pre>
  
  <p>JSF Managed bean is as follows (Relevant code only)</p>
  
  <pre><code>public String getPatientDynamicLabel(InvestigationItem ii, Patient p) {
      String dl;
      String sql;
      dl = ii.getName();
      long ageInDays = commonFunctions.calculateAgeInDays(p.getPerson().getDob(), Calendar.getInstance().getTime());
      sql = "select f from InvestigationItemValueFlag f where  f.fromAge &lt; " + ageInDays + " and f.toAge &gt; " + ageInDays + " and f.investigationItemOfLabelType.id = " + ii.getId();
      List&lt;InvestigationItemValueFlag&gt; fs = getIivfFacade().findBySQL(sql);
      for (InvestigationItemValueFlag f : fs) {
          if (f.getSex() == p.getPerson().getSex()) {
              dl = f.getFlagMessage();
          }
      }
      return dl;
  }
  </code></pre>
  
  <p>Error is </p>
  
  <pre><code>java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
  Exception Description: Error compiling the query [select f from InvestigationItemValueFlag f where f.sex = com.divudi.data.Male and f.fromAge &lt; 12419 and f.toAge &gt; 12419 and f.investigationItemOfLabelType.id = 2678], line 1, column 57: unknown identification variable [com]. The FROM clause of the query does not declare an identification variable [com].
  </code></pre>