title: What is @StaticMetamodel and SingularAttribute<Obj,Obj>?
body: <p>I am trying to figure out this code for about two hours now, for example in below class what are these fields representing? </p>
  
  <pre><code>import java.util.Date;
  import javax.persistence.metamodel.ListAttribute;
  import javax.persistence.metamodel.SingularAttribute;
  import javax.persistence.metamodel.StaticMetamodel;
  import java.util.UUID;
  
  @StaticMetamodel(Address.class)
  public class Address_ extends  {
      public static volatile SingularAttribute&lt;Address, Long&gt; id;
      public static volatile SingularAttribute&lt;Address, UUID&gt; personId;
      public static volatile SingularAttribute&lt;Address, Person&gt; person;
  }
  </code></pre>
  
  <p>The <code>Address.class</code> is a java class which has the following definition:</p>
  
  <pre><code>@Entity
  @Table(name = "address", schema = "public")
  public class Address{
      private Long id;
      private Person person;
      private UUID personId;
      //....
  }
  </code></pre>
  
  <p>Can you, please, explain what are the <code>@StaticMetamodel</code> and <code>@SingularAttribute</code> annotations used for? It might be simple but I can't understand.</p>